Re: Constraint merge and not valid status

From: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
To: Kyotaro HORIGUCHI <horiguchi(dot)kyotaro(at)lab(dot)ntt(dot)co(dot)jp>
Cc: robertmhaas(at)gmail(dot)com, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Constraint merge and not valid status
Date: 2016-07-22 08:35:48
Message-ID: 9733fae3-c32f-b150-e368-a8f87d546a7f@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Hello,

On 2016/07/22 17:06, Kyotaro HORIGUCHI wrote:
> At Fri, 22 Jul 2016 14:10:48 +0900, Amit Langote wrote:
>> On 2016/07/22 0:38, Robert Haas wrote:
>>> On Wed, Jul 13, 2016 at 5:22 AM, Amit Langote wrote:
>>>> Consider a scenario where one adds a *valid* constraint on a inheritance
>>>> parent which is then merged with a child table's *not valid* constraint
>>>> during inheritance recursion. If merged, the constraint is not checked
>>>> for the child data even though it may have some. Is that an oversight?
>>>
>>> Seems like it. I'd recommend we just error out in that case and tell
>>> the user that they should validate the child's constraint first.
>>
>> Agreed.
>>
>> Patch attached. In addition to the recursion from parent case, this seems
>> to be broken for the alter table child inherit parent case as well. So,
>> fixed both MergeWithExistingConstraint (called from
>> AddRelationNewConstraints) and MergeConstraintsIntoExisting (called from
>> ATExecAddInherit). I had to add a new argument is_not_valid to the former
>> to signal whether the constraint being propagated itself is declared NOT
>> VALID, in which we can proceed with merging. Also added some tests for
>> both cases.
>
> It seems to work as expected and message seems to be
> reasonable. Test seems to be fine.

Thanks for reviewing.

> By the way I have one question.
>
> Is it an expected configuration where tables in an inheritance
> tree has different valid state on the same (check) constraint?

I would think not.

> The check should be an equality if it's not.

If you mean that the valid state should be same (equal) at all times on
parent and all the child tables, then that is exactly what the patch tries
to achieve. Currently, valid state of a constraint on a child table is
left to differ from the parent in two cases as described in my messages.

Thanks,
Amit

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dmitriy Sarafannikov 2016-07-22 08:54:28 Re: [HACKERS] Design for In-Core Logical Replication
Previous Message Amit Kapila 2016-07-22 08:27:15 Re: freeze map open item