Re: Re: [pgsql-es-ayuda] nombre de columnas en catálogo

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Roberto Rodríguez Pino <rodpin(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Re: [pgsql-es-ayuda] nombre de columnas en catálogo
Date: 2009-08-27 21:23:01
Message-ID: 20090827212301.GO11213@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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"

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Fernando Hevia 2009-08-28 14:47:25 RE: El indice no mejora me mejora el rendimiento de mis consultas.
Previous Message Fabio Arias 2009-08-27 19:58:46 VENTAJAS Y DESVENTAJAS DE PITR