Re: Oddity in tuple routing for foreign partitions - Mailing list pgsql-hackers

From Etsuro Fujita
Subject Re: Oddity in tuple routing for foreign partitions
Date
Msg-id 5AD88F90.5060001@lab.ntt.co.jp
Whole thread Raw
In response to Re: Oddity in tuple routing for foreign partitions  (Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>)
List pgsql-hackers
(2018/04/19 19:03), Kyotaro HORIGUCHI wrote:
> At Tue, 17 Apr 2018 16:41:31 +0900, Etsuro Fujita<fujita.etsuro@lab.ntt.co.jp>  wrote
in<5AD5A52B.7050206@lab.ntt.co.jp>
>> (2018/04/17 16:10), Amit Langote wrote:
>>> On 2018/04/17 11:13, Kyotaro HORIGUCHI wrote:
>>>> If I'm reading this correctly, ExecInitParititionInfo calls
>>>> ExecInitRoutingInfo so currently CheckValidityResultRel is called
>>>> for the child when partrel is created in ExecPrepareTupleRouting.
>>>> But the move of CheckValidResultRel results in letting partrel
>>>> just created in ExecPrepareTupleRouting not be checked at all
>>>> since ri_ParititionReadyForRouting is always set true in
>>>> ExecInitPartitionInfo.
>>>
>>> I thought the same upon reading the email, but it seems that the patch
>>> does add CheckValidResultRel() in ExecInitPartitionInfo() as well:
>>>
>>> @@ -335,6 +335,13 @@ ExecInitPartitionInfo(ModifyTableState *mtstate,
>>>                          estate->es_instrument);
>>>
>>>        /*
>>> + * Verify result relation is a valid target for an INSERT.  An UPDATE
>>> of a
>>> + * partition-key becomes a DELETE+INSERT operation, so this check is
>>> still
>>> +     * required when the operation is CMD_UPDATE.
>>> +     */
>>> +    CheckValidResultRel(leaf_part_rri, CMD_INSERT);
>>> +
>>> +    /*
>>>         * Since we've just initialized this ResultRelInfo, it's not in any
>>>         * list
>>>         * attached to the estate as yet.  Add it, so that it can be found
>>>         * later.
>>>         *
>>
>> That's right.  So, the validity check would be applied to a partition
>> created in ExecPrepareTupleRouting as well.
>
> Yes, that's actually true but it seems quite bug-prone or at
> least hard to understand. I understand that the
> CheckValidResultRel(INSERT) is just a prerequisite for
> ExecInitRoutingInfo but the relationship is obfucated after this
> patch. If we have a strong reason to error-out as fast as
> possible, the original code seems better to me..

Actually, I think that change would make the initialization for a 
partition more consistent with that for a main target rel in 
ExecInitModifyTable, where we first perform the CheckValidResultRel 
check against a target rel, and if valid, then open indices, initializes 
the FDW, initialize expressions such as WITH CHECK OPTION and RETURNING, 
and so on.  That's reasonable, and I like consistency, so I'd vote for 
that change.

Thanks for the review!

Best regards,
Etsuro Fujita


pgsql-hackers by date:

Previous
From: Etsuro Fujita
Date:
Subject: Re: Oddity in tuple routing for foreign partitions
Next
From: Ashutosh Bapat
Date:
Subject: Re: Should we add GUCs to allow partition pruning to be disabled?