Re: delta relations in AFTER triggers

Thomas Munro <thomas.munro@enterprisedb.com>

From: Thomas Munro <thomas.munro@enterprisedb.com>
To: Kevin Grittner <kgrittn@gmail.com>
Cc: Haribabu Kommi <kommi.haribabu@gmail.com>, Jim Nasby <Jim.Nasby@bluetreble.com>, Craig Ringer <craig@2ndquadrant.com>, Michael Paquier <michael.paquier@gmail.com>, Robert Haas <robertmhaas@gmail.com>, David Fetter <david@fetter.org>, Kevin Grittner <kgrittn@ymail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Amit Khandekar <amit.khandekar@enterprisedb.com>, Alvaro Herrera <alvherre@2ndquadrant.com>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2017-02-21T03:43:55Z
Lists: pgsql-hackers
On Tue, Feb 21, 2017 at 7:14 AM, Thomas Munro
<thomas.munro@enterprisedb.com> wrote:
> On Fri, Jan 20, 2017 at 2:49 AM, Kevin Grittner <kgrittn@gmail.com> wrote:
>> Attached is v9 which fixes bitrot from v8.  No other changes.
>>
>> Still needs review.

Based on a suggestion from Robert off-list I tried inserting into a
delta relation from a trigger function and discovered that it
segfaults:

  * frame #0: 0x00000001057705a6
postgres`addRangeTableEntryForRelation(pstate=0x00007fa58186a4d0,
rel=0x0000000000000000, alias=0x0000000000000000, inh='\0',
inFromCl='\0') + 70 at parse_relation.c:1280 [opt]
    frame #1: 0x000000010575bbda
postgres`setTargetTable(pstate=0x00007fa58186a4d0,
relation=0x00007fa58186a098, inh=<unavailable>, alsoSource='\0',
requiredPerms=1) + 90 at parse_clause.c:199 [opt]
    frame #2: 0x0000000105738530 postgres`transformStmt [inlined]
transformInsertStmt(pstate=<unavailable>) + 69 at analyze.c:540 [opt]
    frame #3: 0x00000001057384eb
postgres`transformStmt(pstate=<unavailable>, parseTree=<unavailable>)
+ 2411 at analyze.c:279 [opt]
    frame #4: 0x0000000105737a42
postgres`transformTopLevelStmt(pstate=<unavailable>,
parseTree=0x00007fa58186a438) + 18 at analyze.c:192 [opt]
    frame #5: 0x00000001059408d0
postgres`pg_analyze_and_rewrite_params(parsetree=0x00007fa58186a438,
query_string="insert into d values (1000000, 1000000, 'x')",
parserSetup=(plpgsql.so`plpgsql_parser_setup at pl_comp.c:1017),
parserSetupArg=0x00007fa58185c2a0, queryEnv=0x00007fa581857798) + 128
at postgres.c:706 [opt]

-- 
Thomas Munro
http://www.enterprisedb.com


Commits

  1. Don't permit transition tables with TRUNCATE triggers.

  2. Pass EXEC_FLAG_REWIND when initializing a tuplestore scan.

  3. Faster expression evaluation and targetlist projection.

  4. Remove obsoleted code relating to targetlist SRF evaluation.

  5. Implement syntax for transition tables in AFTER triggers.