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.