Re: Existencia de columna en tabla

From: "Guido Barosio" <gbarosio(at)gmail(dot)com>
To: "Eliana Gutierrez" <egp1962(at)yahoo(dot)com(dot)au>
Cc: "ayuda postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Existencia de columna en tabla
Date: 2007-01-08 01:10:11
Message-ID: f7f6b4c70701071710g6a52d9a6n3ec2b091c97df38e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Eliana,

Lo que podes hacer es obtener el OID de la relacion en pg_class y
con eso browsear pg_attribute para que te muestre los atributos de la
relacion. Con esto logras ver si existe o no el atributo, por
deduccion.

Seguro hay otra forma mas barata (en terminos de procesamiento
claro), pero bueno, es una forma de empezar.

EJ: Quiero saber que columnas tiene la tabla "a"

SELECT c.oid,
n.nspname,
c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ '^a$'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 2, 3;

Capturo lo retornardo, OID =24588, y ahora con eso podes ejecutar:

SELECT a.attname,
pg_catalog.format_type(a.atttypid, a.atttypmod),
(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
FROM pg_catalog.pg_attrdef d
WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef),
a.attnotnull, a.attnum
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = '24588' AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum

Este query retorna lo siguiente:

attname | format_type | ?column? | attnotnull | attnum
---------+-------------+------------------------------+------------+--------
i | integer | nextval('a_i_seq'::regclass) | t | 1
b | integer | | f | 2
(2 rows)

Como podes ver, en la relacion "a" existen dos columna "b" e "i". "i"
es un serial, y "b" es un entero.

Tenes acceso a un "psql" ? Ejecutando psql con el parametro "-E" vas a
poder ver que comandos utiliza psql para describir las tablas. De ahi
saque esta idea.

Suerte!

Guido

On 1/7/07, Eliana Gutierrez <egp1962(at)yahoo(dot)com(dot)au> wrote:
> Necesito averiguar si una columna existe en una tabla. hasta donde se en la
> pg_class puedo averiguar la existencia de la tabla. pero no la relacion.
>
> Gracias
> Eliana
>
>
>
> Send instant messages to your online friends http://au.messenger.yahoo.com

--
Guido Barosio
-----------------------
http://www.globant.com
guido(dot)barosio(at)globant(dot)com

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-01-08 01:38:18 Re: Estructura JoinType
Previous Message Eliana Gutierrez 2007-01-08 00:58:02 Existencia de columna en tabla