Re: Perl DBD::Pg

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Carlos Agustín L(dot) Avila <cagustinla(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Perl DBD::Pg
Date: 2007-11-28 19:31:15
Message-ID: 20071128193115.GQ5118@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

"Carlos Agustín L. Avila" escribió:

> $res2 = $dbh->prepare("
> SELECT relname, relfilenode FROM pg_class WHERE relname = 'plantillas'
> ");
> $res2->execute();
> @row2 = $res2->fetchrow_array;
> print "$row2[0]\t$row2[1]\n";
>
> my $rows3 = $dbh->selectall_arrayref("
> SELECT attname, attnum FROM pg_attribute WHERE attrelid = $row2[1] AND
> attnum > 2",
> { Slice => {} }
> );
> foreach my $row3 ( @$rows3 ) {
> print "Nombre: $row3->{attname}\t$row3->{attnum}\n";
> }

La verdad es que esta manera de hacerlo es bastante torpe, porque haces
dos consultas a la BD cuando se requiere una sola. De esta manera tu
programa es el doble de lento que lo que realmente se requiere.

En este caso particular la diferencia probablemente no es muy notoria,
pero cuando se convierte en una practica usada con liberalidad, las
aplicaciones terminan siendo muy lentas y la gente se queja de "lo malo
que es Postgres" bla bla bla. En este caso es particularmente
preocupante, porque tu codigo acaba de entrar en el archivo de la lista,
con lo cual la gente que busque en el futuro tomara tu codigo y lo
usara, o sea tus errores se reproduciran por toda la eternidad.

En todo caso te puedo hacer un aporte positivo a tu programa :-) que es
que falla en caso de existir mas de una tabla con el mismo nombre en
distintos esquemas. Por ejemplo prueba haciendo

create schema foo;
create table foo.plantillas (a int, b text);
create schema bar;
create table bar.plantillas (c int, d text);

y luego ejecuta tu programa.

Y eso de poner "AND attnum > 2" seguramente es un error o tiene
alguna explicacion ???

Ademas probablemente deberias poner un ORDER BY attnum para que el
resultado tenga deterministicamente un orden razonable.

--
Alvaro Herrera Developer, http://www.PostgreSQL.org/
Jude: I wish humans laid eggs
Ringlord: Why would you want humans to lay eggs?
Jude: So I can eat them

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-11-28 19:48:54 Re: Preocupacion con PostgreSQL
Previous Message Raul Andres Duque 2007-11-28 18:26:55 Re: Could not connect to remotesocket(preocupacion postgresql)