PostgreSQL - Interfaz Perl
Instalación
PostgreSQL se puede integrar con Perl usando el módulo Perl DBI, que es un módulo de acceso a la base de datos para el lenguaje de programación Perl. Define un conjunto de métodos, variables y convenciones que proporcionan una interfaz de base de datos estándar.
Aquí hay pasos simples para instalar el módulo DBI en su máquina Linux / Unix:
$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
$ tar xvfz DBI-1.625.tar.gz
$ cd DBI-1.625
$ perl Makefile.PL
$ make
$ make install
Si necesita instalar el controlador SQLite para DBI, puede instalarlo de la siguiente manera:
$ wget http://search.cpan.org/CPAN/authors/id/T/TU/TURNSTEP/DBD-Pg-2.19.3.tar.gz
$ tar xvfz DBD-Pg-2.19.3.tar.gz
$ cd DBD-Pg-2.19.3
$ perl Makefile.PL
$ make
$ make install
Antes de comenzar a utilizar la interfaz Perl PostgreSQL, busque el pg_hba.conf archivo en su directorio de instalación de PostgreSQL y agregue la siguiente línea -
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Puede iniciar / reiniciar el servidor de Postgres, en caso de que no se esté ejecutando, usando el siguiente comando:
[[email protected]]# service postgresql restart
Stopping postgresql service: [ OK ]
Starting postgresql service: [ OK ]
API de interfaz DBI
A continuación se muestran las rutinas DBI importantes, que pueden ser suficientes para su requisito de trabajar con la base de datos SQLite desde su programa Perl. Si está buscando una aplicación más sofisticada, puede consultar la documentación oficial de Perl DBI.
S. No. | API y descripción |
---|---|
1 | DBI→connect($data_source, "userid", "password", \%attr) Establece una conexión de base de datos, o sesión, al $ data_source solicitado. Devuelve un objeto de identificador de base de datos si la conexión se realiza correctamente. La fuente de datos tiene la forma siguiente: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg es el nombre del controlador de PostgreSQL y testdb es el nombre de la base de datos. |
2 | $dbh→do($sql) Esta rutina prepara y ejecuta una sola instrucción SQL. Devuelve el número de filas afectadas o indefinidas en caso de error. Un valor de retorno de -1 significa que el número de filas no se conoce, no es aplicable o no está disponible. Aquí $ dbh es un identificador devuelto por DBI → llamada connect (). |
3 | $dbh→prepare($sql) Esta rutina prepara una declaración para su posterior ejecución por parte del motor de base de datos y devuelve una referencia a un objeto identificador de declaración. |
4 | $sth→execute() Esta rutina realiza cualquier procesamiento necesario para ejecutar la instrucción preparada. Se devuelve un indef si se produce un error. Una ejecución exitosa siempre devuelve verdadero independientemente del número de filas afectadas. Aquí $ sth es un identificador de declaración devuelto por $ dbh → prepare ($ sql) call. |
5 | $sth→fetchrow_array() Esta rutina obtiene la siguiente fila de datos y la devuelve como una lista que contiene los valores del campo. Los campos nulos se devuelven como valores indefinidos en la lista. |
6 | $DBI::err Esto es equivalente a $ h → err, donde $ h es cualquiera de los tipos de identificadores como $ dbh, $ sth o $ drh. Esto devuelve el código de error del motor de base de datos nativo del último método de controlador llamado. |
7 | $DBI::errstr Esto es equivalente a $ h → errstr, donde $ h es cualquiera de los tipos de identificadores como $ dbh, $ sth o $ drh. Esto devuelve el mensaje de error del motor de base de datos nativo del último método DBI llamado. |
8 | $dbh->disconnect() Esta rutina cierra una conexión de base de datos previamente abierta por una llamada a DBI → connect (). |
Conectando a la base de datos
El siguiente código de Perl muestra cómo conectarse a una base de datos existente. Si la base de datos no existe, se creará y finalmente se devolverá un objeto de base de datos.
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
Ahora, ejecutemos el programa anterior para abrir nuestra base de datos testdb; si la base de datos se abre correctamente, aparecerá el siguiente mensaje:
Open database successfully
Crear una tabla
El siguiente programa Perl se utilizará para crear una tabla en la base de datos creada anteriormente:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb";
my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL););
my $rv = $dbh->do($stmt);
if($rv < 0) {
print $DBI::errstr;
} else {
print "Table created successfully\n";
}
$dbh->disconnect();
Cuando se ejecuta el programa anterior, creará la tabla EMPRESA en su testdb y mostrará los siguientes mensajes:
Opened database successfully
Table created successfully
INSERTAR Operación
El siguiente programa Perl muestra cómo podemos crear registros en nuestra tabla EMPRESA creada en el ejemplo anterior:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 ));
my $rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;
$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ););
$rv = $dbh->do($stmt) or die $DBI::errstr;
print "Records created successfully\n";
$dbh->disconnect();
Cuando se ejecuta el programa dado anteriormente, creará registros dados en la tabla EMPRESA y mostrará las siguientes dos líneas:
Opened database successfully
Records created successfully
SELECCIONAR Operación
El siguiente programa Perl muestra cómo podemos buscar y mostrar registros de nuestra tabla EMPRESA creada en el ejemplo anterior:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
my $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) {
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Cuando se ejecuta el programa anterior, producirá el siguiente resultado:
Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000
Operation done successfully
Operación ACTUALIZAR
El siguiente código de Perl muestra cómo podemos usar la instrucción UPDATE para actualizar cualquier registro y luego buscar y mostrar registros actualizados de nuestra tabla EMPRESA:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ) {
print $DBI::errstr;
}else{
print "Total number of rows updated : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) {
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Cuando se ejecuta el programa anterior, producirá el siguiente resultado:
Opened database successfully
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 25000
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000
Operation done successfully
Operación DELETE
El siguiente código de Perl muestra cómo podemos usar la declaración DELETE para eliminar cualquier registro y luego buscar y mostrar los registros restantes de nuestra tabla EMPRESA:
#!/usr/bin/perl
use DBI;
use strict;
my $driver = "Pg";
my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres";
my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
my $stmt = qq(DELETE from COMPANY where ID=2;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ) {
print $DBI::errstr;
} else{
print "Total number of rows deleted : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;);
my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) {
print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) {
print "ID = ". $row[0] . "\n";
print "NAME = ". $row[1] ."\n";
print "ADDRESS = ". $row[2] ."\n";
print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();
Cuando se ejecuta el programa anterior, producirá el siguiente resultado:
Opened database successfully
Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 25000
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000
Operation done successfully