Roberto Rodríguez Pino escribió: > Muchas gracias a todos! > Con esta query, logro lo que quiero. > > select a.attrelid, a.attname > from pg_database db, pg_class c, pg_attribute a > where > a.attrelid = c.oid and > db.oid=16385 --id de la BD > and c.relname='MI_TABLA' > and a.attnum>=0; --condicion para no mostrar los atributos asignados por > sistema > ;
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. -- Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC "El conflicto es el camino real hacia la unión" -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda