El jue, 27-08-2009 a las 17:23 -0400, Alvaro Herrera escribió:
> Una aclaración: no necesitas pg_database en esa consulta.  La gran
> mayoría de los catálogos son locales a cada base de datos, es decir,
> sólo contienen los datos de esa base de datos.  Los catálogos globales
> son pg_database, pg_tablespace, pg_authid y pg_auth_member (estos dos
> llevan la información de roles), pg_shdepend (equivalente de pg_depend
> para objetos globales) y pg_shdescription (equivalente de pg_description
> para objetos globales).
> 
> Otra corrección: si tienes dos esquemas y tablas con el mismo nombre
> en cada uno de ellos, la consulta de arriba te va a devolver las
> columnas de ambos.  En el WHERE es mejor poner
> c.oid = 'MI_TABLA'::regclass
> donde el "MI_TABLA" puede ir calificado con el nombre del esquema (por
> ej. public.tabla1).
> 
> Finalmente, te faltó eliminar columnas borradas, "AND NOT attisdroped".
> Prueba después de ALTER TABLE / DROP COLUMN.
> 

Muchas gracias Alvaro por tus observaciones y aclaraciones.
Al final la query la dejé así:

select a.attrelid, a.attname
from pg_database db, pg_class c, pg_attribute a
where 
a.attrelid = c.oid and 
c.oid = 'MI_TABLA'::regclass
and db.oid=16385  --id de la BD
and a.attnum>=0 --condicion para no mostrar los atributos asignados por
sistema
and NOT a.attisdropped --condicion para no mostrar los elementos
eliminados
;

Saludos!
Roberto

Attachment: signature.asc
Description: Esto es una parte de mensaje firmado digitalmente

Responder a