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 ]
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 (). |
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
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
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
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
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
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
🚫