Re: delta relations in AFTER triggers

From: Neha Sharma <neha(dot)sharma(at)enterprisedb(dot)com>
To: Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>, Kevin Grittner <kgrittn(at)gmail(dot)com>
Cc: Prabhat Sahu <prabhat(dot)sahu(at)enterprisedb(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Robert Haas <robertmhaas(at)gmail(dot)com>, Haribabu Kommi <kommi(dot)haribabu(at)gmail(dot)com>, Jim Nasby <Jim(dot)Nasby(at)bluetreble(dot)com>, Craig Ringer <craig(at)2ndquadrant(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, David Fetter <david(at)fetter(dot)org>, Kevin Grittner <kgrittn(at)ymail(dot)com>, Amit Khandekar <amit(dot)khandekar(at)enterprisedb(dot)com>, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>, Corey Huinker <corey(dot)huinker(at)gmail(dot)com>
Subject: Re: delta relations in AFTER triggers
Date: 2017-05-04 12:39:54
Message-ID: CANiYTQv05RRHEnQQnoFKTguURnz+o53M3Zb6Jwa1XCn8ELMi=g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

While testing the feature we encountered one more crash,below is the
scenario to reproduce.

create table t1 ( a int);
create table t2 ( a int);
insert into t1 values (11),(12),(13);

create or replace function my_trig() returns trigger
language plpgsql as $my_trig$
begin
insert into t2(select a from new_table);
RETURN NEW;
end;
$my_trig$;

create trigger my_trigger
after truncate or update on t1
referencing new table as new_table old table as oldtab
for each statement
execute procedure my_trig();

truncate t1;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Log file and core dump attached for reference.

On Thu, May 4, 2017 at 3:21 PM, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>
wrote:

> On Thu, May 4, 2017 at 9:12 PM, Prabhat Sahu
> <prabhat(dot)sahu(at)enterprisedb(dot)com> wrote:
> > I have been testing this for a while and observed a server crash while
> referencing table column value in a trigger procedure for AFTER DELETE
> trigger.
> >
> > -- Steps to reproduce:
> > CREATE TABLE t1(c1 int);
> > CREATE TABLE t2(cc1 int);
> > INSERT INTO t1 VALUES (10);
> > INSERT INTO t2 VALUES (10);
> >
> > CREATE OR REPLACE FUNCTION trig_func() RETURNS trigger AS
> > $$ BEGIN
> > DELETE FROM t1 WHERE c1 IN (select OLD.cc1 from my_old);
> > RETURN OLD;
> > END; $$ LANGUAGE PLPGSQL;
> >
> > CREATE TRIGGER trg1
> > AFTER DELETE ON t2
> > REFERENCING OLD TABLE AS my_old
> > FOR EACH ROW
> > EXECUTE PROCEDURE trig_func();
> >
> > DELETE FROM t2 WHERE cc1 =10;
> > server closed the connection unexpectedly
> > This probably means the server terminated abnormally
> > before or while processing the request.
> > The connection to the server was lost. Attempting reset: Failed.
>
> Reproduced here. The stack looks like this:
>
> frame #3: 0x000000010f06f8b0
> postgres`ExceptionalCondition(conditionName="!(readptr->eflags &
> 0x0002)", errorType="FailedAssertion", fileName="tuplestore.c",
> lineNumber=1237) + 128 at assert.c:54
> frame #4: 0x000000010f0cbc85
> postgres`tuplestore_rescan(state=0x00007ff219840200) + 85 at
> tuplestore.c:1237
> frame #5: 0x000000010eced9b1
> postgres`ExecReScanNamedTuplestoreScan(node=0x00007ff21d007840) + 81
> at nodeNamedtuplestorescan.c:197
> frame #6: 0x000000010eca46a6
> postgres`ExecReScan(node=0x00007ff21d007840) + 822 at execAmi.c:216
> frame #7: 0x000000010ece7eca
> postgres`ExecNestLoop(node=0x00007ff21d006310) + 538 at
> nodeNestloop.c:148
>
> I think the problem is that the tuplestore read pointer hasn't been
> opened with the "rewindable" flag. It works for me with the attached.
>
> --
> Thomas Munro
> http://www.enterprisedb.com
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>
>

--

Regards,

Neha Sharma

Attachment Content-Type Size
logs.zip application/zip 738.9 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Craig Ringer 2017-05-04 12:42:26 Re: Function to move the position of a replication slot
Previous Message Rajkumar Raghuwanshi 2017-05-04 12:39:28 Re: Adding support for Default partition in partitioning