Fwd: Re: [Pgsql-ayuda] Trigger y plpgsql

fernando miguel villarroel noriel visuallinux@hotmail.com
Wed, 23 Apr 2003 16:06:18 +0000


    Hola bueno pude solucionar el problema anterior efectivamente usando 
create or replace function.

   Ahora tengo problemas creo que al diseñar la funcion o mejor dicho al 
escribirla; agradecere me confirmen como la diseño, esto debido a que bueno 
estuve probando colocando un path en la seccion AS, create fuction ejem 
returns opaque as '/var/lib/pgsql/data/ejem.sql'.....; bueno ejem.sql la 
escribi con vi, siguiendo el formato:

begin
  insert into tabla values(getpgusername(),date(now));
end;
language 'plpgsql'

  Como ven esta funcion se dispara al insertar un registro en otra tabla, lo 
que pasa es que estoy probando el uso de trigger y funciones, pero este 
script me da los siguientes error:

ERROR: parse error at or near "/"

   Bueno finalmente probe eliminando la ruta y la escribi directamente en la 
seccion AS y por ahi anduvo mejor, pero no funciono, me dio los siguientes 
errores:

Error: Return type mismatch in fuction returning table row at or near 
"opaque"

o este otro mensaje de error:

Notice:Error ocurred while executing Pl/pgSQL function ejem at END of top 
level PL block
Error:control reaches end of trigger procedure withot RETURN.

la funcion la cree asi:

create or replace function ejem() returns opaque as 'begin insert into tabla 
values(getpgusername(),date())); return opaque; end;' language 'plpgsql'

Agradere mucho me ayuden, tambien lei por ahi que el error mas comun se 
refiere al uso de las comillas.

Gracias y atento a vustros consejos.

Fernando Villarroel.





>From: Alvaro Herrera <alvherre@dcc.uchile.cl>
>To: fernando miguel villarroel noriel <visuallinux@hotmail.com>
>CC: pgsql-ayuda@tlali.iztacala.unam.mx
>Subject: Re: [Pgsql-ayuda] Trigger y plpgsql
>Date: Mon, 21 Apr 2003 21:03:41 -0400
>
>On Mon, Apr 21, 2003 at 11:08:15PM +0000, fernando miguel villarroel noriel 
>wrote:
>
> >  Bueno mis problemas comienzan cuando trato de insertar un registro en 
>una
> > tabla que posee un trigger (clientes); en concreto el error dice:
> >
> > fmgr_info:function 16686: cache lookup failed.
>
>Esto usualmente ocurre porque defines una funcion, creas el trigger, y
>luego borras la funcion y la vuelves a crear.  En este escenario, el
>sistema deja un cache del plan del trigger basado en el OID, pero cuando
>botas la funcion y la creas de nuevo su OID cambia.
>
>La solucion mas sencilla es botar el trigger y volver a crearlo; una
>solucion mejor es usar CREATE OR REPLACE FUNCTION en lugar de DROP
>FUNCTION - CREATE FUNCTION.
>
>Creo que otra alternativa es volver a conectarte (el cache solo dura una
>sesion), pero es incomodo.
>
>--
>Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
>Al principio era UNIX, y UNIX habló y dijo: "Hello world\n".
>No dijo "Hello New Jersey\n", ni "Hello USA\n".
>_______________________________________________
>Pgsql-ayuda mailing list
>Pgsql-ayuda@tlali.iztacala.unam.mx
>http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda


_________________________________________________________________
Charla con tus amigos en línea mediante MSN Messenger: 
http://messenger.yupimsn.com/