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

Responder a