Re: Obtener campos FK y PK

From: "Milton Galo Patricio Inostroza Aguilera" <minoztro(at)gmail(dot)com>
To: "Yoel Mc Lennan" <webmaster(at)yoel(dot)com(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Obtener campos FK y PK
Date: 2007-08-25 06:20:50
Message-ID: 172699c50708242320y3840b326r8ebba90af153cf0a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 25/08/07, Milton Galo Patricio Inostroza Aguilera
<minoztro(at)gmail(dot)com> escribió:
> El 3/08/07, Yoel Mc Lennan <webmaster(at)yoel(dot)com(dot)ar> escribió:
> >
> >
> > Hola grupo, se que había un thread al respecto pero no lo encuentro.
>
> Hola Yoel
>
> >
> > Necesito obtener los campos de una tabla dada y el tipo de campo (Int32,
> > varchar, etc) además de saber que capos son Pk y que campos son FK con
> > respectivas relaciones, osea que tabla es la relacionada a ese FK

Oumm no me había dado cuenta del tipo...sería algo así:

select
a.attname,
t.typname as type
from
pg_attribute a,
pg_class c,
pg_type t
where
c.relname = 'empleador'
and a.attnum > 0
and a.attrelid = c.oid
and a.atttypid = t.oid

donde empleador es el nombre de la relación...quizás si quieres
obtener todo deberías indicar a que esquema pertenecen...
> >
> > tengo algo como esto que me devuelve el tipo de campo, pero no si es pk o fk
> > y su relacion en caso de ser fk
>
> Después de tiempo de haber leído tu mail, hoy en la noche me decidí
> que vería si podía lograr lo que tu pedías {y tomando el consejo de
> Álvaro}...salió algo así:
>
> select
> pg_class.relname,
> pg_constraint.conname,
> pg_constraint.conkey,
> pg_attribute.attname,
> from
> pg_constraint,
> pg_index,
> pg_class,
> pg_attribute
> where
> pg_constraint.conrelid = pg_index.indrelid
> and pg_index.indisprimary
> and pg_constraint.contype = 'p' --este atributo es para pk, si quieres fk pon f
> and pg_class.oid = pg_index.indrelid
> and pg_class.oid = pg_constraint.conrelid
> and pg_attribute.attrelid = pg_class.oid
> and pg_attribute.attnum = ANY (pg_constraint.conkey)
>
> Esto te arroja todas las pk o fk {no olvides cambiar la f}, ahora si
> quieres para una relación en especial utiliza lo siguiente:
>
> and pg_class.relname='trabaja'
>
> trabaja es en este caso el nombre de la relación.
>
>
> >
> > SELECT attname, typname From pg_namespace, pg_attribute, pg_type, pg_class
> > Where pg_type.oid = atttypid AND pg_class.oid = attrelid AND
> > pg_namespace.nspname ='public'
> > AND relnamespace = pg_namespace.oid AND relname ='ciudad' AND attnum >= 1;
> >
> >
> > Gracias por el aoporte.
>
> =) esperemos que el sql sea el correcto igual sería bueno si es que se
> puede optimizar, los con más experiencia lo hagan y así aprendemos
> más, salu2!!
>
> >
> > Yoel Mc Lennan
> >
>
>
> --
> Milton Inostroza Aguilera
>

--
Milton Inostroza Aguilera

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Agustin Casiva 2007-08-25 13:22:02 Re: pg_dump a bd
Previous Message Milton Galo Patricio Inostroza Aguilera 2007-08-25 06:06:47 Re: Obtener campos FK y PK