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>
>>>>>
>>>>>
>>>>>
>>>
>>>
>>>
>
>
>

Responder a