> On 29 Sep 2020, at 18:37, Tom Lane <t...@sss.pgh.pa.us> wrote:
> 
> [ Pulling Daniel into this older thread seems like the cleanest way to
>  unify the two threads ]
> 
> Masahiko Sawada <masahiko.saw...@2ndquadrant.com> writes:
>> If we have ALTER TABLE ONLY / DROP EXPRESSION update the attlocal
>> column of children to true to fix the issue you raised, my proposed
>> patch is not necessary. OTOH if we fix it by prohibiting the command,
>> I guess we need both patches to fix the issues.
> 
> Right, Peter already mentioned that we need a further pg_dump fix on
> top of prohibiting the ONLY ... DROP EXPRESSION case.
> 
> Bug #16622 [1] is another report of this same issue, and in that thread,
> Daniel argues that the right fix is just
> 
> +     /*
> +      * Skip if the column isn't local to the table's definition as the 
> attrdef
> +      * will be printed with the inheritance parent table definition
> +      */
> +     if (!tbinfo->attislocal[adnum - 1])
> +             return;
> 
> without the attgenerated clause that Masahiko-san proposes.
> I think however that that's wrong.  It is possible to have
> a non-attislocal column that has its own default, because
> you can do

Ah, that's the sequence I didn't think of.  I agree with your assessment of
this being wrong. Thanks!

> This does not cause child2.f1's attislocal property to become
> true.  Maybe it should have, but it's probably too late for
> that; at least, pg_dump couldn't assume it's true in older
> servers.  

Do you recall the rationale for it not being set to true?  I didn't spot
anything in the commit history. Intuitively it seems a tad odd.

> Therefore, since we can't tell whether the default
> is inherited or not, we'd better dump it.

Agreed.

> (I recall that pg_dump has a hack somewhere that checks for
> textual equality of CHECK conditions to avoid dumping redundant
> child copies.  Maybe we could do something similar here.)

Unless someone beats me to it I will take a stab at this to see what it would
look like.

cheers ./daniel

Reply via email to