Hice la prueba y funciono con el esquema public pero al colocar un esquema 
diferente me sale esto:
NOTICE:  no existe la relación «clientesborradocopia»

esto es lo que ejecuto:
select 
public.fn_RecuperarReg('test','clientesborradocopia','idcliente','2',null,null);

y este es el trigger:

create or replace function public.fn_RecuperarReg (p_schema varchar, p_tabla 
varchar, p_campo varchar, p_valor varchar, p_maquina inet, p_usuario varchar) 
returns varchar
as
$$
declare
    biRegRec bigint := 0;
    biRegNoRec bigint := 0;
    regrec hstore;
begin   
    FOR regrec IN SELECT registro from borradoscopia 
        where registro -> p_campo like p_valor
        and tabla = p_tabla 
        and esquema = p_schema
        and coalesce(maquina,'0.0.0.0') = 
coalesce(p_maquina,coalesce(maquina,'0.0.0.0')) --campo opcional
        and coalesce(usuario,'') like coalesce('%'||p_usuario||'%','%%') 
--campo opcional
        and coalesce(usuario,'') like coalesce('%'||p_usuario||'%','%%') 
--campo opcional
    LOOP
    begin
        execute 'insert into ' || 
quote_ident(p_schema)||'.'||quote_ident(p_tabla)::regclass 
        || ' SELECT * FROM populate_record(null::'|| 
quote_ident(p_schema)||'.'||quote_ident(p_tabla)::regclass ||', $1)' using 
regrec;
        --debe borrar cada registro que no haya fallado su copia
        delete from borradoscopia where registro = regrec;
        biRegRec:=biRegRec+1;
    exception
    when others then        
        raise notice '%',SQLERRM;
        biRegNoRec:=biRegNoRec+1;
    end;    
    END LOOP;
    if (biRegNoRec=0) and (biRegRec >0) then
    return biRegRec || ' Registro(s) recuperado(s) con éxito. 100% registros 
recuperados';
    elseif biRegNoRec>0 then 
    return biRegNoRec || ' no se pudieron recuperar'|| biRegRec || ' 
Registro(s) recuperado(s) con éxito, ' ;
    else         
     return 'No hay registros por recuperar.';
    end if;
    
end;
$$
LANGUAGE plpgsql VOLATILE
  COST 100;

¿que puede ser?




>________________________________
>De: Alvaro Herrera <[email protected]>
>Para: Alejandro Carrillo <[email protected]>
>CC: Ayuda <[email protected]>
>Enviado: miércoles 16 de noviembre de 2011 15:30
>Asunto: Re: Rv: [pgsql-es-ayuda] recorrer old
>
>
>Excerpts from Alejandro Carrillo's message of mié nov 16 17:15:11 -0300 2011:
>> Es TG_TABLE_SCHEMA, sin embargo he tenido lios al tratar de incluir el 
>> schema en el insert, por favor revisen que pudo haber pasado:
>> 
>> execute 'insert into ' || quote_ident(p_schema||'.'||p_tabla)::regclass 
>>         || ' SELECT * FROM populate_record(null::'|| 
>> quote_ident(p_schema||'.'||p_tabla)::regclass ||', $1)' using regrec;
>> 
>> El error:
>> 
>> NOTICE:  no existe la relación «public.clientesborradocopia»
>> 
>> Y la bendita tabla si existe.
>
>No, estás tratando de usar el nombre-con-esquema como si fuera solamente
>el nombre.  Debes aplicar quote_ident a cada parte separadamente.   Creo
>que esto debería funcionar:
>
>execute 'insert into ' || (quote_ident(p_schema) 
>||'.'||quote_ident(p_tabla))::regclass 
>
>(mismo tratamiento a la siguiente línea), aunque honestamente en este
>caso y dado que ya estás usando un cast a regclass yo usaría simplemente
>el OID,
>
>execute 'insert into ' || TG_RELID::regclass 
>
>-- 
>Álvaro Herrera <[email protected]>
>
>
>

Responder a