next up previous contents index
Next: Métodos de Pg Up: Perl Previous: Perl   Índice General   Índice de Materias

Pg

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.


Tabla: Variable de ambiente y valores por omisión en Pg::connectdb
Parámetro Variable de ambiente Valor por omisión
host PGHOST localhost
port PGPORT 5432
options PGOPTIONS ""
tty PGTTY ""
dbname PGDATABASE usuario actual
user PGUSER usuario actual
password PGPASSWORD ""


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";
    }



Subsecciones
next up previous contents index
Next: Métodos de Pg Up: Perl Previous: Perl   Índice General   Índice de Materias
Ismael Olea 2001-04-21