Como mencionamos antes, Pg nos dá acceso a todas las funciones de biblioteca de libpq. La interfase está implementada orientada a objetos, lo que facilita el uso, ya que no es necesario liberar la conexión ni la memoria empleada, ya que Perl invoca a los destructores en cuanto la última referencia a un objeto desaparece.
Para iniciar el trabajo, es necesario incluir la interfase Pg y luego iniciar la conexión:
use Pg; $coneccion = Pg::connectdb("dbname=mibase " . "dbhost=maquina.remota.com port=5432 user=lola" . "password=paquita"); $estatus=$conn->status; if ($estatus != PGRES_CONNECTION_OK) { print STDERR "Error fatal en la conexion ($estatus), terminamos\n"; exit (1); } $resultado = $conn->exec("create database prueba"); $estatus = $resultado->resultStatus; if ($estatus != PGRES_COMMAND_OK) { print STDERR "Error fatal en la creacion de la base ($estatus), terminamos\n"; exit (1); }
Por supuesto, las opciones dadas en Pg::connectdb son opcionales y tienen los valores por omisión y correspondientes variables de ambiente que se describen en la tabla 14.1.
Es importante cotejar todas las acciones con los posibles mensajes de error.
Para obtener datos de la base es necesario hacer una consulta y luego traer los resultados, bien de un golpe o uno por uno:
$resultado = $conn->exec("select * from archivos group by dmd5"); $estatus = $result->resultStatus; if ($result->resultStatus != PGRES_COMMAND_OK) { print STDERR "Error al sacar el dmd5\n"; } while (@renglon = $result->fetchrow) { push(@la_lista, $renglon[1]); }
como en este caso. El método fetchrow trae las tuplas una por una y en el caso de los tributos nulos, tienen el valor undef. Para traer toda la tabla en una sola instrucción:
Pg::doQuery($conn, "select nombre, apellido from tabla", \@arreglo); foreach my $i (0 .. $#arreglo) { foreach my $j (0 .. $#{$arreglo[$i]}) { print "$arreglo[$i][$j]\t"; } print "\n"; }