[Pgsql-ayuda] OID de un registro. Virus en "pgsql-ayuda.mbox"

Armando Maldonado amaldonado@dportales.cl
Fri, 13 Feb 2004 09:32:32 -0300


 Cuando tengo dudas de donde estan cada guardadas las cosas dentro de la DB=
 lo=20
que hago consulto el programa pg_dump.c  ya que este programa lo que hace=20
genera consultas SQL para extraer la informaci=F3n triggers, indices , tus=
=20
oids, etc.


Mmmm con respento a t=FA pregunta no pude crear una funcion ya que el lengu=
aje=20
plpgsql tiene problemas con las variables con referencias
ejemplos

primer ejemplo que estaba haciendo
=2D------------------------------------------------------------------------=
=2D-----------------------------
CREATE FUNCTION "que_oid" (integer) RETURNS text AS '
DECLARE
        Registro     RECORD;
        Registro2 RECORD;
        el_oid ALIAS FOR $1;
        dat        text;
BEGIN
        FOR Registro IN select c.Relname from pg_class c where Relkind=3D'r=
' and=20
Relname not like '%pg%' LOOP
                select oid INTO Registro2 from Registro.Relname where=20
oid=3Del_oid;
                IF FOUND THEN
                        RETURN Registro.Relname;
                END IF;
        END LOOP;
' LANGUAGE 'plpgsql';
=2D--------------------------------------------------------------



otro ejemplo


DROP FUNCTION que_oid2 (text);
CREATE FUNCTION que_oid2 (text) RETURNS text AS '
DECLARE
        el_oid       ALIAS FOR $1;
        dato         text;
        Reg1         RECORD;
        Reg2         RECORD;
        comunas       text;
BEGIN
     FOR Reg2 IN SELECT * FROM pg_class WHERE Relkind=3D''r'' AND Relname n=
ot=20
like ''%pg%''  LOOP
           comunas:=3DReg2.Relname;
            FOR Reg1 IN SELECT oid,* FROM comunas LOOP
                return Reg1.oid;
            END LOOP;
           --return ''select * from ''||tabla||'' where oid=3D''||el_oid;
           --dato:=3D(''select oid from ''||tabla||'' where oid=3D''||el_oi=
d);
             --select oid INTO Reg1 from tabla where oid=3Del_oid;
             --IF dato IS NOT NULL THEN
             --IF FOUND THEN
                --return tabla;
             --END IF;
     END LOOP;
     RETURN null;
END;
' LANGUAGE 'plpgsql';


a me aburr=ED





pero lo que puedes hacer es un promama en C o php


que haga lo siguiente

select c.Relname from pg_class c where Relkind=3D'r' and Relname not like=20
'%pg%';

luego recorrer en un FOR las tuplas con el nombre de las tablas

y crear el otro dentro del for  =20

select from $tabla where oid=3D$oid

y si existe retornar el $tabla
El Jueves 12 Febrero 2004 07:14, Cuevas Luis escribi=F3:
> Hola amigos/as como ustedes saben al ocurrir una
> operaci=F3n de insertar automaticamente se le asigna un
> OID al nuevo registro insertado.
> Mis preguntas son:
>
> 1-Existe alguna tabla del sistema donde se pueda
> acceder a los OID de los registros. (OJO, no de las
> columnas)
> 2- Puedo saber en que tabla esta insertado un registro
> a partir de su OID. :-)
>
> Otro aparte. El fichero "pgsql-ayuda.mbox" colocado
> para descargar en el sitio de la lista y que contiene
> todos los mensajes de la lista tiene un virus. En
> realidad no es un virus es una vulnerabilidad
> "Exploit/iFrame", que como es l=F3gico afecta a
> Windows...
>
> Gracias
> Saludos
> Luis
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Finance: Get your refund fast by filing online.
> http://taxes.yahoo.com/filing.html
> _______________________________________________
> Pgsql-ayuda mailing list
> Pgsql-ayuda@tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda