Thread: Trigger and function not on speaking terms

Trigger and function not on speaking terms

From
Jeff Boes
Date:
Hmm, this is puzzling me:

create or replace function fn_foo(text) returns trigger as '
begin  # Do some stuff with $1
end;
' language 'plpgsql';

CREATE FUNCTION

create table bar (aaa text);

CREATE TABLE

create trigger trg_bar
after insert or update on bar
execute procedure fn_foo('string');

ERROR:  function fn_foo() does not exist

It would seem my trigger definition is trying to find fn_foo(), when I 
mean for it to call fn_foo(TEXT).

-- 
(Posted from an account used as a SPAM dump. If you really want to get
in touch with me, dump the 'jboes' and substitute 'mur'.)
________
Jeffery Boes <>< jboes@qtm.net


Re: Trigger and function not on speaking terms

From
Richard Poole
Date:
On Mon, Aug 02, 2004 at 04:20:15PM -0400, Jeff Boes wrote:

> It would seem my trigger definition is trying to find fn_foo(), when I 
> mean for it to call fn_foo(TEXT).

Triggers have to be declared to take no arguments; they find the rows on
which they operate in magical ways. (For PL/PgSQL triggers, see chapter
37.10 of the manual.)

Richard


Re: Trigger and function not on speaking terms

From
Stephan Szabo
Date:
On Mon, 2 Aug 2004, Jeff Boes wrote:

> Hmm, this is puzzling me:
>
> create or replace function fn_foo(text) returns trigger as '
> begin
>    # Do some stuff with $1
> end;
> ' language 'plpgsql';
>
> CREATE FUNCTION
>
> create table bar (aaa text);
>
> CREATE TABLE
>
> create trigger trg_bar
> after insert or update on bar
> execute procedure fn_foo('string');
>
> ERROR:  function fn_foo() does not exist
>
> It would seem my trigger definition is trying to find fn_foo(), when I
> mean for it to call fn_foo(TEXT).

I don't remember why, but the arguments from the create trigger statement
are passed differently from standard arguments (I think it's like TGARGS
in plpgsql).


Re: Trigger and function not on speaking terms

From
Kevin Davis
Date:
You need to define fn_foo w/o params per Doc Section 19.9.
Your intent as expressed in the trigger def (args) can then be fulfilled
through special top level vars.

On Mon, 2004-08-02 at 16:20, Jeff Boes wrote:
> Hmm, this is puzzling me:
> 
> create or replace function fn_foo(text) returns trigger as '
> begin
>    # Do some stuff with $1
> end;
> ' language 'plpgsql';
> 
> CREATE FUNCTION
> 
> create table bar (aaa text);
> 
> CREATE TABLE
> 
> create trigger trg_bar
> after insert or update on bar
> execute procedure fn_foo('string');
> 
> ERROR:  function fn_foo() does not exist
> 
> It would seem my trigger definition is trying to find fn_foo(), when I 
> mean for it to call fn_foo(TEXT).