Re: Error Message

Поиск
Список
Период
Сортировка
От Michael Fuhr
Тема Re: Error Message
Дата
Msg-id 20051027010006.GA59813@winnie.fuhr.org
обсуждение исходный текст
Ответ на Re: Error Message  (Terry Lee Tucker <terry@esc1.com>)
Ответы Re: Error Message  (Michael Fuhr <mike@fuhr.org>)
Список pgsql-general
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

В списке pgsql-general по дате отправления:

Предыдущее
От: "Cristian Prieto"
Дата:
Сообщение: Variable return type...
Следующее
От: Michael Fuhr
Дата:
Сообщение: Re: Error Message