From: | "Ross J(dot) Reedstrom" <reedstrm(at)rice(dot)edu> |
---|---|
To: | "Dave A(dot)" <pgadmin(at)pod13(dot)com> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: function does not exist |
Date: | 2003-01-10 22:23:34 |
Message-ID: | 20030110222334.GD8689@wallace.ece.rice.edu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Quoting from http://www.postgresql.org/idocs/index.php?plpgsql-trigger.html :
PL/pgSQL can be used to define trigger procedures. A trigger procedure
is created with the CREATE FUNCTION command as a function with no
arguments and a return type of OPAQUE. Note that the function must be
declared with no arguments even if it expects to receive arguments
specified in CREATE TRIGGER --- trigger arguments are passed via
TG_ARGV, as described below.
So, you need to write a trigger version of your function, or write a
trigger wrapper that pulls out the args and calls your work function.
Ross
On Fri, Jan 10, 2003 at 05:22:47PM -0500, Dave A. wrote:
> I am using postgresql version 7.2.3, and have the following situation.
>
> When I attempt to add a function, I get the error CreateTrigger: function
> mem_leveled() does not exist. Using the function in psql (i.e. SELECT
> mem_leveled('fubar', 4, '2002/12/30 10:09:00 GMT'); ) works fine, I just
> can't create a trigger for it.
>
> I know its something stupid I'm doing (or not doing).
>
> CREATE TABLE members (
> name CHARACTER VARYING(256),
> level smallint,
> date_updated timestamptz,
> ... other stuff ...
> )
>
> CREATE TABLE mem_history (
> name CHARACTER VARYING(256),
> level smallint,
> date_achieved timestamptz
> )
>
> CREATE FUNCTION mem_leveled (varchar, smallint, timestamptz) RETURN BOOLEAN
> AS
> 'DELCARE
> mem_lvl RECORD;
> BEGIN
> SELECT INTO mem_lvl * FROM mem_history WHERE name = $1 AND level = $2;
> IF NOT FOUND THEN
> INSERT INTO mem_history VALUES ($1, $2, $3);
> END IF;
> RETURN TRUE;
> END;
> ' LANGUAGE 'plpgsql';
>
> CREATE TRIGGER update_mem_level AFTER INSERT OR UPDATE
> ON members FOR EACH ROW
> EXECUTE PROCEDURE mem_leveled('name', 'level', 'date_updated');
>
> ------
> Dave A.
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
From | Date | Subject | |
---|---|---|---|
Next Message | Josh Berkus | 2003-01-10 22:26:49 | Re: function does not exist |
Previous Message | Dave A. | 2003-01-10 22:22:47 | function does not exist |