On Thu, May 26, 2016 at 8:50 AM, Thomas Güttler < guettl...@thomas-guettler.de> wrote:
> I (and a team mate) guess that the docs miss information about the timing > of triggers, > which are not constraint triggers: > > https://www.postgresql.org/docs/devel/static/sql-createtrigger.html > > > {{{ > When the CONSTRAINT option is specified, this command creates a constraint > trigger. This is the same as a regular trigger except that the timing of > the trigger firing can be adjusted using SET CONSTRAINTS. Constraint > triggers must be AFTER ROW triggers on tables. They can be fired either at > the end of the statement causing the triggering event, or at the end of the > containing transaction; in the latter case they are said to be deferred. A > pending deferred-trigger firing can also be forced to happen immediately by > using SET CONSTRAINTS. Constraint triggers are expected to raise an > exception when the constraints they implement are violated. > }}} > > OK, timing of constraint triggers is explained. > > But I think the docs don't state the timing of normal AFTER triggers. > > Or am I blind? > Through omission. Constraint triggers can optionally be deferred - given the specificity that means normal triggers cannot. By the time a given statement has completed all relevant normal triggers will have fired. The various timings of combinations of (before/after + row/statement) are not explicitly documented though there doesn't seem to be non-intuitive behavior going on. Maybe knowing why you are asking the question will help us to understand if/how things could be improved. David J.