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
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 |