Re: obtener info de tabla: campos, restricciones

From: "Gustavo" <gustavor(at)intercomgi(dot)net>
To: "Blas Lopez" <blaslopez(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: obtener info de tabla: campos, restricciones
Date: 2007-04-09 11:14:13
Message-ID: 00cf01c77a98$4592ba50$e802a8c0@gustavo
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Probablemente soluciones tu problema modificando tu consulta de la siguiente
manera

DECLARE
Tabla alias for $1;
aux oid;
begin
select oid into aux
from pg_class
where relname=Tabla;
return aux;
end;

Suerte,

----- Original Message -----
From: "Blas Lopez" <blaslopez(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Thursday, April 05, 2007 3:12 PM
Subject: Re: [pgsql-es-ayuda] obtener info de tabla: campos, restricciones

Utilizo pgAdmin III y Postgresql manager lite 3 para administrar el
servidor.
Analizando un poco el esquema vi que puedo sacar informacion de dos
tablas pg_class y pg_constraint donde aparecen las tablas con sus oid
y las claves primarias y foraneas tambien con sus oid.
Por eso se me ocurrio escribir una funcion que reciba el nombre de la
tabla y trate de devolver el/los campo/s que figura/n como clave
primaria y/o el/los campo/s que figuran como clave/s foranea/s como
sigue:

CREATE OR REPLACE FUNCTION "public"."f_TablaClavesPrimyAjenas"
("Tabla" varchar) RETURNS SETOF varchar AS
$body$
/* Funcion que devuelve Nombre de los campos que son
clave Primaria y Ajenas */
begin
select oid, conname, contype, conrelid, conkey, confkey
from pg_constraint
where conrelid = f_Tablaoid(Tabla);
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Todavia esta incompleta, pero se ve que necesito el oid de la tabla
para acceder. Ademas no se si mi logica esta bien o falta algo, recien
comienzo con PL.

La otra funcion seria:

CREATE OR REPLACE FUNCTION "public"."f_Tablaoid" ("Tabla" varchar)
RETURNS oid AS
$body$
/* Funcion que devuelve el oid de una Tabla */
DECLARE
Tabla alias for $1;
begin
select oid, relname
from pg_class
where relname=Tabla;
return pg_class.oid;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

Pero al ejecutar esta con Postgresql manager lite me devuelve:

ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function "f_Tablaoid" line 5 at SQL statement

Algo esta faltando seguramente pero no se que es.

El 5/04/07, José Manuel Ruiz <josemanuelruizbaena(at)gmail(dot)com> escribió:
> Sé que se puede saber esto que pides haciendo select a las que forman el
> diccionario de datos de tu base de datos. Pero si te conectas con "psql" a
> tu base de datos (desde la línea de comandos de linux sé que podrás
> hacerlo
> "psql <nombreDB>" como usuario postgres). Una vez conectado haces "\d
> <nombreTabla>" y te devolverá la descripción de la tabla que es lo que
> creo
> que buscas (en oracle DESC <nombreTabla>).
>
> Un saludo.
>
> El día 4/04/07, Blas Lopez <blaslopez(at)gmail(dot)com> escribió:
> >
> > Hola, soy un poco nuevo, comence a trabajar con Postgres sobre Windows
> > en Enero para recibirme de programador.
> > Estoy con VB6, y ahora necesitaria saber como obtener informacion
> > sobre una Tabla: campos (columnas), y restricciones (clave principal y
> > clave foranea).
> > Es decir ¿que tipo de consulta me devuelve esa información? Aclaro que
> > todas las tablas se encuentran en el esquema Public y tengo instalado
> > Postgres 8.2
> > Desde ya gracias.
> >
> > ---------------------------(fin del
> mensaje)---------------------------
> > TIP 8: explain analyze es tu amigo
> >
>
>
>
> --
> "Comparte lo que sabes, aprende lo que no sepas"
> Todo por el conocimiento libre
>
> Linux user number 441469

---------------------------(fin del mensaje)---------------------------
TIP 8: explain analyze es tu amigo

--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.446 / Virus Database: 269.0.0/752 - Release Date: 08/04/2007
20:34

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gustavo 2007-04-09 12:14:16 Fw: Crear usuario postgres
Previous Message José Manuel Ruiz 2007-04-09 08:01:12 Re: Crear usuario postgres