Re: Improving CREATE CONSTRAINT TRIGGER documentation - trigger firing order

Поиск
Список
Период
Сортировка
От Michael Glaesemann
Тема Re: Improving CREATE CONSTRAINT TRIGGER documentation - trigger firing order
Дата
Msg-id F72804E8-08C7-4EA2-AA35-70203F25A536@seespotcode.net
обсуждение исходный текст
Ответ на Re: Improving CREATE CONSTRAINT TRIGGER documentation - trigger firing order  (David Pufer <david.pufer@7data.eu>)
Список pgsql-docs
On Apr 21, 2007, at 11:48 , David Pufer wrote:

> Tom Lane wrote:
>> Michael Glaesemann <grzm@seespotcode.net> writes:
>>> On Apr 21, 2007, at 4:39 , David Pufer wrote:
>>>> In my opinion it would be nice to mention in SQL reference
>>>> commands that constraint triggers created by CREATE CONSTRAINT
>>>> TRIGGER are fired in creation order unlike regular triggers
>>>> created by command CREATE TRIGGER. As I know, the firing order
>>>> of the CONSTRAINT TRIGGER is determined by the XXXXX num at
>>>> "RI_ConstraintTrigger_XXXXX" column in pg_trigger table.
>>> I believe this just falls out of the normal order of trigger
>>> firing as explained in the CREATE TRIGGER documentation (http://
>>> www.postgresql.org/docs/8.2/interactive/sql-createtrigger.html)
>> The proposed change is wrong anyway: AFAICS from looking at the
>> code, an RI_ConstraintTrigger_XXXXX name is only generated for
>> triggers that are created in support of FOREIGN KEY constraint
>> syntax. If you use CREATE CONSTRAINT TRIGGER then the trigger name
>> is whatever you say it is. I don't recall if it was always like
>> that, but that's definitely the behavior in CVS HEAD.

<snip />

> As Tom notedm a while ago it might be different in CVS HEAD and
> consequently in 8.3.

Just for my own confirmation, the behavior is different in HEAD.

postgres=# create table a_table (a_id integer primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index
"a_table_pkey" for table "a_table"
CREATE TABLE
postgres=# create function a_trigger_function () returns trigger
language plpgsql as $$ begin return null; end;$$;
CREATE FUNCTION
postgres=# create constraint trigger a_constraint_trigger after
insert or update or delete on a_table deferrable initially deferred
for each row execute procedure a_trigger_function();
CREATE TRIGGER
postgres=# select tgname, tgconstrname from pg_trigger;
          tgname          |     tgconstrname
-------------------------+----------------------
pg_sync_pg_database     |
pg_sync_pg_authid       |
pg_sync_pg_auth_members |
a_constraint_trigger    | a_constraint_trigger
(4 rows)

postgres=# select version();

version
------------------------------------------------------------------------
------------------------------------------------------------------------
-
PostgreSQL 8.3devel on powerpc-apple-darwin8.9.0, compiled by GCC
powerpc-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc.
build 5367)
(1 row)

A very nice improvement!

Michael Glaesemann
grzm seespotcode net



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

Предыдущее
От: David Pufer
Дата:
Сообщение: Re: Improving CREATE CONSTRAINT TRIGGER documentation - trigger firing order
Следующее
От: Guillaume Lelarge
Дата:
Сообщение: Patch for monitoring.sgml