Hi, On Tue, Oct 23, 2018 at 8:46 PM Andrew Dunstan <andrew.duns...@2ndquadrant.com> wrote: > On 10/22/2018 10:00 PM, Amit Langote wrote: > > After observing the test case in the provided log, I managed to reproduce > > it with the following: > > > > create table foo (a int primary key, b int); > > create table bar (a int references foo on delete cascade, b int); > > insert into foo values (1, 1); > > insert into foo values (2, 2); > > alter table foo add c int; > > alter table foo drop c; > > delete from foo; > > 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. > > > > Analyzing this crash, I located the bug down to GetTupleForTrigger(), but > > perhaps it's really in heap_expand_tuple() / expand_tuple(), where the > > value of trigger tuple's t_self is being switched from a valid one to an > > invalid value. > > > > In heaptuple.c: expand_tuple() > > > > > > ItemPointerSetInvalid(&((*targetHeapTuple)->t_self)); > > > > > > FWIW, attached patch fixes this for me. Adding Andrew whose recent commit > > 7636e5c60f [1] seems to have introduced the heap_expan_tuple call in > > GetTupleForTrigger. Maybe, he can better judge a fix for this. > > Thanks. I think the line in expand_tuple is a thinko and we should > change it, rather than change GetTupleForTrigger().
Agreed. > Here is a patch that does that and also adds your test case to the > regression tests. Looks good. Thanks, Amit