Re: postgres crash on concurrent update of inheritance partitioned table

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Tomas Vondra <tomas.vondra@2ndquadrant.com>
Cc: Andres Freund <andres@anarazel.de>, Oleksii Kliukin <alexk@hintbits.com>, pgsql-bugs@lists.postgresql.org, ildus@adjust.com, Chris Travers <chris.travers@adjust.com>, Nick Babadzhanian <nickb@adjust.com>, julian.schauder@gmx.de
Date: 2020-01-28T22:29:59Z
Lists: pgsql-bugs
Tomas Vondra <tomas.vondra@2ndquadrant.com> writes:
> On Tue, Jan 28, 2020 at 05:17:14PM +0100, Oleksii Kliukin wrote:
>> We have experienced a few crashes a day since upgrading to pg 12.1 last
>> week, during the process of updating an inheritance-partitioned table by
>> several concurrent sessions.

> Yeah, I can reproduce it too. If I had to guess, I'd say it's another
> bug due to 
>      commit 3fb307bc4a76815f96fec28a0d1525ab3fbbcfb4
>      Author: Andres Freund <andres@anarazel.de>
>      Date:   Mon Sep 9 05:21:30 2019 -0700
>      Reorder EPQ work, to fix rowmark related bugs and improve efficiency.
> which introduced relsubs_done et al, and perhaps did not get the life
> cycle / resetting right. Not sure.

Yup, that's it exactly.  EvalPlanQualStart was expecting to reuse
relsubs_rowmark and relsubs_done, but that storage will be recycled by
EvalPlanQualEnd because it's in the query context of the recheckestate.
AFAICS the re-use has no semantic value, so I just got rid of it.

			regards, tom lane



Commits

  1. Fix dangling pointer in EvalPlanQual machinery.

  2. Reorder EPQ work, to fix rowmark related bugs and improve efficiency.