Re: BUG #15437: Segfault during insert into declarative partitioned table with a trigger creating partition

From: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: skaurus(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #15437: Segfault during insert into declarative partitioned table with a trigger creating partition
Date: 2018-10-23 03:36:14
Message-ID: bf3d7c7d-8f9d-97de-0ba9-f860b342af7d@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 2018/10/19 12:45, Amit Langote wrote:
> On 2018/10/19 11:52, Tom Lane wrote:
>> Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> writes:
>>> On 2018/10/18 20:57, PG Bug reporting form wrote:
>>>> I tried to use declarative partitioning and, to avoid creating partitions by
>>>> hand, to make them in ON BEFORE STATEMENT trigger. Trigger executes
>>>> successfully (proved that with RAISE NOTICE), but server crashes.
>>
>>> The problem here is with the server allowing to create a partition of the
>>> table being inserted into, inside the table's BEFORE INSERT trigger.
>>> Generally speaking, the command that's run inside the trigger shouldn't
>>> have been allowed to proceed if it might change the table's properties
>>> that the execution of the ongoing command is depending upon.
>>
>> Check.
>>
>>> I propose the attached to fix that.
>>
>> Hmm ... I wonder if we shouldn't do CheckTableNotInUse for *both* cases,
>> is_partition or no?
>
> Yeah, that would be better robustness-wise, but I couldn't think of a case
> where not doing CheckTableNotInUse for the !is_partition case would be
> problematic. Adding an inheritance child doesn't change the relcache
> content of the parent table, but for partitioning it does. Maybe I'm
> missing something though.
>
> Attached updated patch adds the check for both cases, although I'm not
> sure what the error message text added by the patch should look like. Is
> the following OK?
>
> CheckTableNotInUse(relation, "CREATE TABLE INHERITS / PARTITION OF");

Added this patch to the upcoming CF:

https://commitfest.postgresql.org/20/1836/

Thanks,
Amit

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2018-10-23 09:51:55 BUG #15453: Installer registers with major version only
Previous Message Amit Langote 2018-10-23 03:27:41 Re: BUG #15448: server process (PID 22656) was terminated by exception 0xC0000005