1 de enero de 2010

PostgreSQL & Perl

Perl permite una conexión directa a las bases de datos PostgreSQL mediante el interface generico DBI, el de PostgreSQL es el DBD::Pg que se conecta a la BDD como cliente tomando las filas, columnas y datos para usarlos en el programa perl.


0) Instalar el módulo DBD::Pg en Debian:
#apt-get install libdbd-pg-perl

1) Comprobar que el modulo DBD::Pg está correctament instalado, accediendo a una bsas de datos psql:

#!/usr/bin/perl
use DBI;
my $VAR01 = DBI->connect("dbi:Pg:databasename",'user','password');
my $VAR02 = $VAR01->disconnect();

-Si sale algun error es que no esta correctamente instalado el módulo perl-

1) Conexion a una BDD psql desde perl:

use DBI; # módulos que vamos a usar

use DBD::Pg; # esto no haría falta

my $DBI = DBI->connect("dbi:Pg:dbname=nombredelabasededatos");
my $dbh = DBI->connect("dbi:Pg:dbname=template1", 'nombreusuario', 'clave');



2) Extraer tuplas con perl de una BDD psql:
Usando los ciclos de preparacion, ejecución y extracción de datos.

#!/usr/bin/perl
use DBI;
use strict;
my $dbh = DBI->connect("dbi:Pg:dbname=ipuniverse",'USER');
$dbh->{RaiseError} => 1; #ref

my $sth = $dbh->prepare("SELECT * FROM scann2 WHERE scann2.px='O' AND scann2.yy='0' LIMIT 1");
$sth->execute;
my @row;
@row = $sth->;fetchrow_array or die "No match for query";

my $var1 = $row[0];
my $var2 = $row[1];
my $var3 = $row[2];
my $var4 = $row[3];

print "$row[0] $row[1] $row[2] $row[3]\n";
print "$var1 $var2 $var3 $var4\n";

$sth->finish;
$dbh->disconnect;
exit;

Con este script hemos extraido los registros de una tupla de una BDD de PostgreSQL y los hemos asignado a las varables en perl.

INSERTando segistros en PostgreSQL desde Perl:
Se recomienda usar el método secuencial de preparación y ejecución por motivos de rendimento especialmente si hay busquedas en la bdd.
También esta el método directo, prepare+execute todo en uno.
Un ejemplo de ambos métodos:

#!/usr/bin/perl
use DBI;
use strict;
#conectamos con la BD
my $dbh = DBI->connect("dbi:Pg:dbname=ipuniverse",'USER');
$dbh->{RaiseError} => 1;

#metodo directo
$dbh->do("INSERT INTO table VALUES ('valores','$variables')");

#método secuencial
my $sth = $dbh->prepare("UPDATE table SET campo1='valor o variable' WHERE campo2='valor o variable'");
$sth->execute;
$sth->finish;

$dbh->disconnect;

REF:

http://www.arsys.info/programacion/bases-de-datos/perl-y-dbi/
http://flanagan.ugr.es/dbi/manual.htm
http://geneura.ugr.es/~jmerelo/tutoriales/bd-sql/
Ejemplos de instrucciones perl-postgresql:
http://linuxbloggers.org/create-insert-select-update-perl-script-and-postgresql-database-examples/
Tutorial PSQL desde Perl:
http://www.felixgers.de/teaching/perl/perl_DBI.html


No hay comentarios:

Publicar un comentario