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

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

pgsql-es-ayuda by date

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

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