Re: AFTER triggers and constraints

From: David Greco <David_Greco(at)harte-hanks(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: AFTER triggers and constraints
Date: 2013-06-28 15:09:12
Message-ID: 187F6C10D2931A4386EE8E58E13857F630438BD2@BY2PRD0811MB415.namprd08.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

-----Original Message-----
From: Tom Lane [mailto:tgl(at)sss(dot)pgh(dot)pa(dot)us]
Sent: Friday, June 28, 2013 10:10 AM
To: David Greco
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: [GENERAL] AFTER triggers and constraints

David Greco <David_Greco(at)harte-hanks(dot)com> writes:
> Since the trigger is defined as AFTER ROW, versus AFTER STATEMENT, I believe the trigger should be considered part of the statement, therefore the constraint should not be checked until after the row triggers have run. Any thoughts?

Not sure that this is terribly well documented, but you can arrange for your triggers to fire before the FK-enforcement triggers. Triggers on the same table and event type fire in alphabetical (in ASCII) order, so just choose a name that's before the FK triggers, which if memory serves have names starting with "RI_". So for instance
CREATE TRIGGER "Parent_ar_trg" ...
would have worked the way you want.

regards, tom lane

Thanks Tom,

Yes, renaming the trigger does in fact work. Any thoughts on the theory of this behavior? i.e. is this ANSI compliant? Or should there be a mechanism in place that guarantees the FK-enforcement trigger runs after all others?

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Simon Riggs 2013-06-28 15:57:35 Re: AFTER triggers and constraints
Previous Message Tom Lane 2013-06-28 14:10:12 Re: AFTER triggers and constraints