Thread: C Trigger issue
Create function, attempt to create trigger fails, yet function obviously exists. I can't seem to typecast the trigger parameters. \df even misses the function. temp=# CREATE FUNCTION dbuser_account(varchar(40), varchar(40), varchar(40)) temp-# RETURNS OPAQUE temp-# AS '/usr/home/rbt/temp/postgresql-7.1beta4/contrib/user_account/user_acco unt.so' temp-# language 'C'; CREATE temp=# temp=# \df dbuser_account List of functions Result | Function | Arguments --------+----------+----------- (0 rows) temp=# temp=# select dbuser_account('test', 'test', 'test'); ERROR: dbuser_account: not fired by trigger manager temp=# temp=# temp=# CREATE TRIGGER dbuser_account_trg temp-# AFTER INSERT temp-# OR DELETE temp-# OR UPDATE temp-# ON users temp-# FOR EACH row temp-# EXECUTE PROCEDURE dbuser_account('val1', 'val2', 'val3'); ERROR: CreateTrigger: function dbuser_account() does not exist temp=# temp=# DROP FUNCTION dbuser_account(varchar(40), varchar(40), varchar(40)); DROP -- Rod Taylor There are always four sides to every story: your side, their side, the truth, and what really happened.
Sorry, Postgres 7.1 beta4 -- Rod Taylor There are always four sides to every story: your side, their side, the truth, and what really happened. ----- Original Message ----- From: "Rod Taylor" <rod.taylor@inquent.com> To: "Hackers List" <pgsql-hackers@postgresql.org> Sent: Tuesday, February 13, 2001 10:35 AM Subject: [HACKERS] C Trigger issue > Create function, attempt to create trigger fails, yet function > obviously exists. I can't seem to typecast the trigger parameters. > \df even misses the function. > > > > temp=# CREATE FUNCTION dbuser_account(varchar(40), varchar(40), > varchar(40)) > > temp-# RETURNS OPAQUE > > temp-# AS > '/usr/home/rbt/temp/postgresql-7.1beta4/contrib/user_account/user_acco > unt.so' > > temp-# language 'C'; > > CREATE > > temp=# > > temp=# \df dbuser_account > > List of functions > > Result | Function | Arguments > > --------+----------+----------- > > (0 rows) > > temp=# > > temp=# select dbuser_account('test', 'test', 'test'); > > ERROR: dbuser_account: not fired by trigger manager > > temp=# > > temp=# > > temp=# CREATE TRIGGER dbuser_account_trg > > temp-# AFTER INSERT > > temp-# OR DELETE > > temp-# OR UPDATE > > temp-# ON users > > temp-# FOR EACH row > > temp-# EXECUTE PROCEDURE dbuser_account('val1', 'val2', 'val3'); > > ERROR: CreateTrigger: function dbuser_account() does not exist > > temp=# > > temp=# DROP FUNCTION dbuser_account(varchar(40), varchar(40), > varchar(40)); > > DROP > > -- > Rod Taylor > > There are always four sides to every story: your side, their side, the > truth, and what really happened. >
IIRC, trigger functions don't take parameters, they're func() returns opaque. The arguments given in create trigger are passed in a different way. That's why the error message is saying dbuser_account() is missing. On Tue, 13 Feb 2001, Rod Taylor wrote: > Sorry, Postgres 7.1 beta4 > -- > Rod Taylor > > There are always four sides to every story: your side, their side, the > truth, and what really happened. > ----- Original Message ----- > From: "Rod Taylor" <rod.taylor@inquent.com> > To: "Hackers List" <pgsql-hackers@postgresql.org> > Sent: Tuesday, February 13, 2001 10:35 AM > Subject: [HACKERS] C Trigger issue > > > > Create function, attempt to create trigger fails, yet function > > obviously exists. I can't seem to typecast the trigger parameters. > > \df even misses the function. > > > > > > > > temp=# CREATE FUNCTION dbuser_account(varchar(40), varchar(40), > > varchar(40)) > > > > temp-# RETURNS OPAQUE > > > > temp-# AS > > > '/usr/home/rbt/temp/postgresql-7.1beta4/contrib/user_account/user_acco > > unt.so' > > > > temp-# language 'C'; > > > > CREATE > > > > temp=# > > > > temp=# \df dbuser_account > > > > List of functions > > > > Result | Function | Arguments > > > > --------+----------+----------- > > > > (0 rows) > > > > temp=# > > > > temp=# select dbuser_account('test', 'test', 'test'); > > > > ERROR: dbuser_account: not fired by trigger manager > > > > temp=# > > > > temp=# > > > > temp=# CREATE TRIGGER dbuser_account_trg > > > > temp-# AFTER INSERT > > > > temp-# OR DELETE > > > > temp-# OR UPDATE > > > > temp-# ON users > > > > temp-# FOR EACH row > > > > temp-# EXECUTE PROCEDURE dbuser_account('val1', 'val2', 'val3'); > > > > ERROR: CreateTrigger: function dbuser_account() does not exist > > > > temp=# > > > > temp=# DROP FUNCTION dbuser_account(varchar(40), varchar(40), > > varchar(40)); > > > > DROP > > > > -- > > Rod Taylor > > > > There are always four sides to every story: your side, their side, > the > > truth, and what really happened. > > >