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.

Estos son los 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 de PostgreSQL Perl, busque pg_hba.conf en el 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 si no se inicia con el siguiente comando:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

API DBI

A continuación se muestran las rutinas DBI importantes que pueden satisfacer sus requisitos para trabajar con una base de datos SQLite desde su programa Perl. Si está buscando una aplicación más compleja, puede echar un vistazo a la documentación oficial de Perl DBI.

C. No. API y descripción
1 DBI→connect($data_source, «userid», «password», \%attr)

Establece una conexión o sesión de base de datos con el $ data_source solicitado. Devuelve un objeto descriptor de base de datos si se establece una conexión.

La fuente de datos tiene este aspecto: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg es el nombre del controlador PostgreSQL y testdb es el nombre de la base de datos.

2 $ dbh -> do($ sql)

Este procedimiento prepara y ejecuta una instrucción SQL. Devuelve el número de filas afectadas, o undef en caso de error. Un valor de retorno de -1 significa que el número de filas es desconocido, no aplicable o no disponible. Donde $ dbh es el identificador devuelto por la llamada DBI → connect ().

3 $ dbh -> prepare($ sql)

Este procedimiento prepara una declaración para su posterior ejecución por parte del motor de la base de datos y devuelve una referencia al objeto descriptor de la declaración.

4 $ sth -> execute()

Esta rutina realiza cualquier procesamiento necesario para ejecutar la declaración preparada. En caso de error, se devuelve undef. La ejecución exitosa siempre devuelve verdadero independientemente del número de filas afectadas. Donde $ sth es el identificador de declaración devuelto por la llamada $ dbh → prepare ($ sql).

5 $ sth -> fetchrow_array ()

Este procedimiento selecciona la siguiente fila de datos y la devuelve como una lista de valores de campo. Los campos nulos se devuelven en la lista como valores indefinidos.

6 $ DBI :: err

Esto es equivalente a $ h → err, donde $ h es cualquiera de los tipos de descriptores, como $ dbh, $ sth o $ drh. Esto devuelve el código de error del motor de la base de datos nativa del último método de controlador llamado.

7 $ DBI :: errstr

Esto es equivalente a $ h → errstr, donde $ h es cualquiera de los tipos de descriptores 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 ()

Este procedimiento cierra la conexión de la base de datos previamente abierta llamando a DBI → connect ().

Conexión 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 successfullyn";

Ahora ejecutemos el programa anterior para abrir nuestra base de datos. testdb; si la base de datos se abre con éxito, dará el siguiente mensaje:

Open database successfully

Crear Tabla

El siguiente programa Perl se utilizará para crear una tabla en una base de datos creada previamente:

#!/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 successfullyn";

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 successfullyn";
}
$dbh->disconnect();

Cuando se ejecuta el programa anterior, creará una tabla COMPANY 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 COMPANY 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 successfullyn";

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 successfullyn";
$dbh->disconnect();

Cuando se ejecuta el programa anterior, creará los registros dados en la tabla COMPANY y mostrará las siguientes dos líneas:

Opened database successfully
Records created successfully

SELECCIONAR operación

El siguiente programa Perl muestra cómo podemos recuperar y mostrar registros de nuestra tabla COMPANY 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 successfullyn";

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] ."nn";
}
print "Operation done successfullyn";
$dbh->disconnect();

Cuando se ejecuta el programa anterior, producirá la siguiente salida:

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 recuperar y mostrar los registros actualizados de nuestra tabla COMPANY.

#!/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 successfullyn";

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 : $rvn";
}
$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] ."nn";
}
print "Operation done successfullyn";
$dbh->disconnect();

Cuando se ejecuta el programa anterior, producirá la siguiente salida:

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 BORRAR

El siguiente código de Perl muestra cómo podemos usar la instrucción DELETE para eliminar cualquier registro y luego recuperar y mostrar los registros restantes de nuestra tabla COMPANY.

#!/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 successfullyn";

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 : $rvn";
}
$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] ."nn";
}
print "Operation done successfullyn";
$dbh->disconnect();

Cuando se ejecuta el programa anterior, producirá la siguiente salida:

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

🚫