Re: delta relations in AFTER triggers
Kevin Grittner <kgrittn@ymail.com>
From: Kevin Grittner <kgrittn@ymail.com>
To: Marti Raudsepp <marti@juffo.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>,
Heikki Linnakangas <hlinnakangas@vmware.com>,
Amit Khandekar <amit.khandekar@enterprisedb.com>,
Robert Haas <robertmhaas@gmail.com>, David Fetter <david@fetter.org>,
Alvaro Herrera <alvherre@2ndquadrant.com>,
Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2014-09-03T21:14:17Z
Lists: pgsql-hackers
Marti Raudsepp <marti@juffo.org> wrote: > On Wed, Sep 3, 2014 at 10:49 PM, Kevin Grittner <kgrittn@ymail.com> wrote: >> Marti Raudsepp <marti@juffo.org> wrote: >>> The concept of "lightweight relations" that pop into existence when a >>> certain kind of trigger definition is used somewhere in the function >>> stack, without a CREATE TABLE, without being discoverable in >>> information_schema etc., I find needs some more justification than >>> I've seen in this thread. So far I've only heard that it's more >>> convenient to implement in the current PostgreSQL code base. >> >> It is required by the SQL standard. > > I had a cursory read of the SQL 20nn draft and I don't get this > impression. The only place I could find discussing the behavior of > "transition tables" is in Foundation "4.39.1 General description of > triggers", which says: > > "Special variables make the data in the transition table(s) available > to the triggered action. For a statement-level > trigger the variable is one whose value is a transition table." > > There is no information about the scoping of such variables, so I > assume it refers to a regular locally scoped variable. > > Did I miss something? Apparently. I did a search on the document and counted and got 101 occurrences of "transition table". I might be off by a few, but that should be pretty close. Perhaps this, from 4.14 most directly answers your point: | A transient table is a named table that may come into existence | implicitly during the evaluation of a <query expression> or the | execution of a trigger. A transient table is identified by a | <query name> if it arises during the evaluation of a <query | expression>, or by a <transition table name> if it arises during | the execution of a trigger. Such tables exist only for the | duration of the executing SQL-statement containing the <query | expression> or for the duration of the executing trigger. > Are you reading a different version of the spec? I'm looking at a draft of 200x from 2006-02-01. -- Kevin Grittner EDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
Don't permit transition tables with TRUNCATE triggers.
- 29fd3d9da0ff 10.0 landed
-
Pass EXEC_FLAG_REWIND when initializing a tuplestore scan.
- 304007d9f1f6 10.0 landed
-
Faster expression evaluation and targetlist projection.
- b8d7f053c5c2 10.0 cited
-
Remove obsoleted code relating to targetlist SRF evaluation.
- ea15e18677fc 10.0 cited
-
Implement syntax for transition tables in AFTER triggers.
- 8c48375e5f43 10.0 cited