Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group