Обсуждение: Triggers

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

Triggers

От
"Philip J. Boonzaaier"
Дата:
The technical reference gives an example of a trigger on a table - employee
Just to test this, I have created the following table,
CREATE TABLE employee
(name VARCHAR(30),
age int4,
state VARCHAR(2),
manager VARCHAR(3),
adult VARCHAR(3)); 

The I created a simple Function, as follows :

CREATE FUNCTION trig_insert_update_check_emp() RETURNS opaque AS '
BEGIN
IF new.age > 20 THEN
new.adult = ''yes'';
ELSE
new.adult = ''no'';
END IF;
END;
' LANGUAGE 'plpgsql';

Finally, I defined the Trigger as :

CREATE TRIGGER employee_insert_update
BEFORE INSERT OR UPDATE ON employee
FOR EACH ROW EXECUTE PROCEDURE trig_insert_update_check_emp();

Now, when I execute the following :

INSERT INTO employee (name,age,state,manager)
VALUES ('sean',29,'tx','yes');

I get :

ERROR fmgr_info function 6264440 cache lookup failed


What am I doing wrong ????




Re: Triggers

От
"Jonathan M. Gardner"
Дата:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thursday 26 February 2004 2:18 am, Philip J. Boonzaaier wrote:
> The technical reference gives an example of a trigger on a table -
> employee Just to test this, I have created the following table,
> CREATE TABLE employee
> (name VARCHAR(30),
> age int4,
> state VARCHAR(2),
> manager VARCHAR(3),
> adult VARCHAR(3));
>
> The I created a simple Function, as follows :
>
> CREATE FUNCTION trig_insert_update_check_emp() RETURNS opaque AS '
> BEGIN
> IF new.age > 20 THEN
> new.adult = ''yes'';
> ELSE
> new.adult = ''no'';
> END IF;
> END;
> ' LANGUAGE 'plpgsql';

Couple of comments:
1) Your trigger functions needs to return something. In this case, you
would "RETURN NEW".
2) I believe trigger functions need to "RETURNS TRIGGER", not "RETURNS
opaque", but I could be wrong. Give that a try.

Question:
1) What version of PostgreSQL are you running?

- --
Jonathan Gardner
jgardner@jonathangardner.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)

iD8DBQFASKulqp6r/MVGlwwRAgpLAKCycwL/i+/mb6bW1W4QjHKBO9e0xQCgl42q
pmohSw7PZiuIWgOQXxtgvI0=
=4iDJ
-----END PGP SIGNATURE-----


Re: Triggers

От
Richard Huxton
Дата:
Philip J. Boonzaaier wrote:
> The technical reference gives an example of a trigger on a table - employee
> Just to test this, I have created the following table,
> CREATE TABLE employee
> (name VARCHAR(30),
> age int4,
> state VARCHAR(2),
> manager VARCHAR(3),
> adult VARCHAR(3)); 
> 
> The I created a simple Function, as follows :
> 
> CREATE FUNCTION trig_insert_update_check_emp() RETURNS opaque AS '

The "opaque" type has been split into several different ones, if you're 
using a recent version of PG, you'll want "RETURNS trigger".

[snip]
> Now, when I execute the following :
> 
> INSERT INTO employee (name,age,state,manager)
> VALUES ('sean',29,'tx','yes');
> 
> I get :
> 
> ERROR fmgr_info function 6264440 cache lookup failed

This usually means you redefined something - PG isn't smart enough (yet) 
to re-check all the dependencies in something like this. I'd guess you 
dropped/recreated the function after defining the trigger, yes?

The solution in older versions is to put the CREATE FUNCTION and CREATE 
TRIGGER in the same file so that you drop/recreate both together.

HTH
--   Richard Huxton  Archonet Ltd