Thread: Trigger and function not on speaking terms
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
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
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).
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).