Search Postgresql Archives

Re: Error Message

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have a base table called "process". Each row of this table is anchored by a serial column labeled "fluid_id".

After data has been entered into a row in "process", I want to trigger a row in another table labeled "specification" also with a column labeled "fluid_id". I would like this number from "process" entered into "specification" as an integer.

I would like this to happen after each row in "process" has satisfied the not null requirements.

I may not be employing the language you are use to using however, I hope this explanation is somewhat clear.

Thanks for your help.

Bob




----- Original Message ----- From: "Michael Fuhr" <mike@xxxxxxxx>
To: "Terry Lee Tucker" <terry@xxxxxxxx>
Cc: "Postgre General" <pgsql-general@xxxxxxxxxxxxxx>
Sent: Wednesday, October 26, 2005 6:00 PM
Subject: Re:  Error Message


On Wed, Oct 26, 2005 at 07:45:19PM -0400, Terry Lee Tucker wrote:
You cannot pass argments to trigger functions. You can to other types of
functions, but not functions used as triggers. Arguments are passed regarding the old and new records and other built in variables regarding what kind of
operation is going on, but all of that is "unseen".

They must be created as in:
CREATE TRIGGER trig1 AFTER INSERT
   ON process FOR EACH ROW
   EXECUTE PROCEDURE base();
                     ^^^^^^
Note: no argument.

You *can* pass arguments to trigger functions but it's done a little
differently than with non-trigger functions.  The function must be
defined to take no arguments; it reads the arguments from a context
structure instead of in the normal way.  PL/pgSQL trigger functions,
for example, read their arguments from the TG_ARGV array.

http://www.postgresql.org/docs/8.0/interactive/plpgsql-trigger.html
http://www.postgresql.org/docs/8.0/interactive/trigger-interface.html

Example:

CREATE TABLE foo (id integer, x integer);

CREATE FUNCTION func() RETURNS trigger AS $$
BEGIN
   NEW.x := TG_ARGV[0];
   RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER footrig BEFORE INSERT OR UPDATE ON foo
 FOR EACH ROW EXECUTE PROCEDURE func(12345);

INSERT INTO foo (id) VALUES (1);

SELECT * FROM foo;
id |   x
----+-------
 1 | 12345
(1 row)

However, it's not clear if this is what Bob is trying to do.  His
original attempt was:

CREATE TRIGGER trig1 AFTER INSERT
   ON process FOR EACH ROW
  EXECUTE PROCEDURE base(int4);

He's given what looks like a function signature instead of passing
an argument.  Even if this worked, he hasn't specified what argument
should be passed.  Bob, can you explain what you're trying to do?

--
Michael Fuhr

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org


---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

              http://archives.postgresql.org

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux