Intenté hacerlo pero me sale el error: ERROR: los subíndices de arrays están fuera de rango CONTEXT: PL/pgSQL function "fn_borradocopia" line 10 at asignación
********** Error ********** Acá esta el script: create or replace function public.fn_borradocopia () returns trigger as $$ declare arrDatos bytea[][]; i integer =1; r record; begin FOR r IN SELECT (each(hstore(OLD))).* LOOP arrDatos[i][1] := r.key; arrDatos[i][2] := r.value; --RAISE NOTICE 'key:%, value: %', r.key, r.value; i=i+1; END LOOP; insert into borradoscopia values (TG_RELNAME,arrDatos); return OLD; end; $$ LANGUAGE plpgsql VOLATILE COST 100; --aca van cada trigger para cada tabla drop TRIGGER trg_borradocopia on clientesborradocopia; CREATE TRIGGER trg_borradocopia BEFORE DELETE ON clientesborradocopia FOR EACH ROW EXECUTE PROCEDURE fn_borradocopia () ; ¿Que estoy haciendo mal? Gracias >________________________________ >De: Rodrigo Gonzalez <rjgonz...@estrads.com.ar> >Para: Alejandro Carrillo <faster...@yahoo.es> >CC: "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> >Enviado: viernes 4 de noviembre de 2011 12:05 >Asunto: Re: [pgsql-es-ayuda] recorrer old > > >El 04/11/11 13:56, Alejandro Carrillo escribió: >Y eso me soporta bien la copia de tipos de datos binarios (oid, public.lo, >bytea)??? >> No tengo idea...pero es simple de probar con una funcion que lea de una tabla y muestre los datos no? >Si haces las pruebas por favor envia tus resultados para que los demas sepamos > >Gracias > >Rodrigo > > >> >> >>>________________________________ >>>De: Rodrigo Gonzalez <rjgonz...@estrads.com.ar> >>>Para: Alejandro Carrillo <faster...@yahoo.es> >>>CC: Alvaro Herrera <alvhe...@alvh.no-ip.org>; >>>"pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> >>>Enviado: viernes 4 de noviembre de 2011 11:29 >>>Asunto: Re: [pgsql-es-ayuda] recorrer old >>> >>> >>>El 04/11/11 11:46, Alejandro Carrillo escribió: >>>y de ahi como la paso a array?? con select >>>array((each(hstore(clientesborradocopia))).value) from clientesborradocopia >>>where idcliente = 4 >>>>no me deja >>>> Lee http://okbob.blogspot.com/2009/10/dynamic-access-to-record-fields-in.html >>> >>>Lo interesante para vos es: >>> >>> >>>FOR r IN SELECT (each(hstore(NEW))).* LOOP RAISE NOTICE 'key:%, value: %', >>>r.key, r.value; END LOOP; O sea que ahi tenes lo que precisas para leer >>>NEW y OLD Espero que te sirva Saludos Rodrigo >>> >>> >>>> >>>> >>>>>________________________________ >>>>>De: Alvaro Herrera <alvhe...@alvh.no-ip.org> >>>>>Para: Alejandro Carrillo <faster...@yahoo.es> >>>>>CC: Ayuda <pgsql-es-ayuda@postgresql.org> >>>>>Enviado: viernes 4 de noviembre de 2011 9:30 >>>>>Asunto: Re: [pgsql-es-ayuda] recorrer old >>>>> >>>>> >>>>>Excerpts from Alejandro Carrillo's message of jue nov 03 15:43:29 -0300 2011: >>>>>> Buenas tardes, >>>>>> >>>>>> Conocen como copiar los datos del registro OLD, en los triggers de plpgsql, de la siguiente forma (o con alguna otra forma): >>>>>> >>>>>> arrDatos bytea[]; >>>>>> >>>>>> for (e=0;e<=OLD.numcampos;e++){ >>>>>> arrDatos[e]=old[e]::bytea; >>>>>> } >>>>> >>>>>QUizas podrias usar hstore; tiene una funcion que convierte un record >>>>>en un hstore si mal no recuerdo. >>>>> >>>>>-- >>>>>Álvaro Herrera <alvhe...@alvh.no-ip.org> >>>>> >>>>> >>>>> >>> >>> >>> > > >