perdon el trigger no, ese es la funcion para recuperar informacion. Tambien esa 
es la razon por la cual no puedo usar TG_RELID



>________________________________
>De: Alejandro Carrillo <faster...@yahoo.es>
>Para: Alvaro Herrera <alvhe...@alvh.no-ip.org>
>CC: "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org>
>Enviado: miércoles 16 de noviembre de 2011 16:11
>Asunto: Re: Rv: [pgsql-es-ayuda] recorrer old
>
>
>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 <alvhe...@alvh.no-ip.org>
>>Para: Alejandro Carrillo <faster...@yahoo.es>
>>CC: Ayuda <pgsql-es-ayuda@postgresql.org>
>>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 <alvhe...@alvh.no-ip.org>
>>
>>
>>
>
>

Responder a