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