Re: Perl DBD::Pg

From: "Carlos Agustín L(dot) Avila" <cagustinla(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Perl DBD::Pg
Date: 2007-11-28 20:40:48
Message-ID: 474DD250.7030803@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera escribió:
> "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.
>
>
Acepto que es mu torpe el código, como excusa fue la primerá prueba.
Sobre los esquemas no tenia contemplado utilisarlos, por el momento.
Del "AND attnum > 2" es por que solo necesito esos atributos.
Afortunadamente mi problema esta resuelto.
Finalmente ¿conoces alguna lista de PostgreSQL para torpes como yo donde
mis torpesas no afecten la eternidad?
Gracias.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-11-28 20:54:04 Re: Perl DBD::Pg
Previous Message Alvaro Herrera 2007-11-28 19:48:54 Re: Preocupacion con PostgreSQL