Обсуждение: Trigger from a function

Поиск
Список
Период
Сортировка

Trigger from a function

От
"dguevara"
Дата:
Hello all,

I have a problem with a trigger which is executed when i make an UPDATE trought a simple query, but
not when the UPDATE is made in a store procedure.

Maybe i'm missing something in the declaration of the function and i would appreciate any help.
T
his is the function:

CREATE OR REPLACE FUNCTION X
  RETURNS SETOF void AS
$BODY$

begin
  update A;
end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;


The trigger:

CREATE TRIGGER Y
  BEFORE INSERT OR UPDATE
  ON A
  FOR EACH ROW
  EXECUTE PROCEDURE Z;

CREATE OR REPLACE FUNCTION Z
  RETURNS "trigger" AS
$BODY$
begin
     if (tg_op in ('INSERT', 'UPDATE', 'DELETE')) then
        update A;
     end if;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;


Thanks in advance.
Danilo Guevara
Departamento de Sistemas
Acceso Crediticio SAC


Re: Trigger from a function

От
Decibel!
Дата:
On Feb 18, 2008, at 10:29 AM, dguevara wrote:

> Hello all,
>
> I have a problem with a trigger which is executed when i make an
> UPDATE trought a simple query, but
> not when the UPDATE is made in a store procedure.
>
> Maybe i'm missing something in the declaration of the function and
> i would appreciate any help.
> T
> his is the function:
>
> CREATE OR REPLACE FUNCTION X
>   RETURNS SETOF void AS
> $BODY$
>
> begin
>   update A;
> end;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
>
>
> The trigger:
>
> CREATE TRIGGER Y
>   BEFORE INSERT OR UPDATE
>   ON A
>   FOR EACH ROW
>   EXECUTE PROCEDURE Z;
>
> CREATE OR REPLACE FUNCTION Z
>   RETURNS "trigger" AS
> $BODY$
> begin
>      if (tg_op in ('INSERT', 'UPDATE', 'DELETE')) then
>         update A;
>      end if;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;

Can't help much with your fake example, but I am wondering why you
have a recursive trigger on A.
--
Decibel!, aka Jim C. Nasby, Database Architect  decibel@decibel.org
Give your computer some brain candy! www.distributed.net Team #1828



Вложения

Re: Trigger from a function

От
"dguevara"
Дата:
Thanks for your response, i made a mistake, the last function is like this:

CREATE OR REPLACE FUNCTION Z
   RETURNS "trigger" AS
 $BODY$
 begin
      if (tg_op in ('INSERT', 'UPDATE', 'DELETE')) then
         update B;
      end if;
 $BODY$
  LANGUAGE 'plpgsql' VOLATILE;


And the reason why i made a fake example is because it basically is that, a simple function with a
simple update. I'd just like to know why if  i do that update through a query it invokes the trigger
and not when i do it inside the function.


Danilo Guevara
Departamento de Sistemas
Acceso Crediticio SAC

---------- Original Message -----------
From: Decibel! <decibel@decibel.org>
To: dguevara <dguevara@acceso.com.pe>
Cc: pgsql-admin@postgresql.org
Sent: Thu, 21 Feb 2008 17:31:44 -0600
Subject: Re: [ADMIN] Trigger from a function

> On Feb 18, 2008, at 10:29 AM, dguevara wrote:
>
> > Hello all,
> >
> > I have a problem with a trigger which is executed when i make an
> > UPDATE trought a simple query, but
> > not when the UPDATE is made in a store procedure.
> >
> > Maybe i'm missing something in the declaration of the function and
> > i would appreciate any help.
> > T
> > his is the function:
> >
> > CREATE OR REPLACE FUNCTION X
> >   RETURNS SETOF void AS
> > $BODY$
> >
> > begin
> >   update A;
> > end;
> > $BODY$
> >   LANGUAGE 'plpgsql' VOLATILE;
> >
> >
> > The trigger:
> >
> > CREATE TRIGGER Y
> >   BEFORE INSERT OR UPDATE
> >   ON A
> >   FOR EACH ROW
> >   EXECUTE PROCEDURE Z;
> >
> > CREATE OR REPLACE FUNCTION Z
> >   RETURNS "trigger" AS
> > $BODY$
> > begin
> >      if (tg_op in ('INSERT', 'UPDATE', 'DELETE')) then
> >         update A;
> >      end if;
> > $BODY$
> >   LANGUAGE 'plpgsql' VOLATILE;
>
> Can't help much with your fake example, but I am wondering why you
> have a recursive trigger on A.
> --
> Decibel!, aka Jim C. Nasby, Database Architect  decibel@decibel.org
> Give your computer some brain candy! www.distributed.net Team #1828
------- End of Original Message -------