[Pgsql-ayuda] Listado de tablas

Ing. Roberto Andrade Fonseca randrade@abl.com.mx
Fri, 4 Oct 2002 15:50:29 -0500 (CDT)


Hola:


On Fri, 4 Oct 2002, AAAGU wrote:

> Holas,
> soy nuevo en esto. Alguien podria decirme si es
> posible obtener un listado con los campos de
> determinada tabla si, por ejemplo, estoy trabajando
> con Java y Postgresql?
> Gracias.

Si ejecutas psql con el par=E1metro -E puedes ver las consultas que genear =
los comandos internos, entre ellos el comando \d:

Por ejemplo:
\d pais

genera:

********* QUERY **********
SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules
FROM pg_class WHERE relname=3D'pais'
**************************

********* QUERY **********
SELECT a.attname, format_type(a.atttypid, a.atttypmod), a.attnotnull, a.att=
hasdef, a.attnum
FROM pg_class c, pg_attribute a
WHERE c.relname =3D 'pais'
  AND a.attnum > 0 AND a.attrelid =3D c.oid
ORDER BY a.attnum
**************************

********* QUERY **********
SELECT substring(d.adsrc for 128) FROM pg_attrdef d, pg_class c
WHERE c.relname =3D 'pais' AND c.oid =3D d.adrelid AND d.adnum =3D 1
**************************

********* QUERY **********
SELECT c2.relname
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname =3D 'pais' AND c.oid =3D i.indrelid AND i.indexrelid =3D c2=
=2Eoid
AND NOT i.indisunique ORDER BY c2.relname
**************************

********* QUERY **********
SELECT c2.relname
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname =3D 'pais' AND c.oid =3D i.indrelid AND i.indexrelid =3D c2=
=2Eoid
AND i.indisprimary AND i.indisunique ORDER BY c2.relname
**************************

********* QUERY **********
SELECT c2.relname
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname =3D 'pais' AND c.oid =3D i.indrelid AND i.indexrelid =3D c2=
=2Eoid
AND NOT i.indisprimary AND i.indisunique ORDER BY c2.relname
**************************

********* QUERY **********
SELECT t.tgname
FROM pg_trigger t, pg_class c
WHERE c.relname=3D'pais' AND c.oid =3D t.tgrelid
**************************

                                     Table "pais"
   Column    |         Type          |                    Modifiers        =
           =20
-------------+-----------------------+-------------------------------------=
------------
 id          | integer               | not null default nextval('"pais_id_s=
eq"'::text)
 descripcion | character varying(30) |=20
Primary key: pais_pkey
Triggers: RI_ConstraintTrigger_153561,
          RI_ConstraintTrigger_153563

La que necesitas es:

SELECT a.attname, format_type(a.atttypid, a.atttypmod), a.attnotnull, a.att=
hasdef, a.attnum
FROM pg_class c, pg_attribute a
WHERE c.relname =3D 'pais'
  AND a.attnum > 0 AND a.attrelid =3D c.oid
ORDER BY a.attnum


pero tal ves debes pedir menos campos.

Saludos,

Roberto Andrade Fonseca
randrade@abl.com.mx