Re: tablecmds.c/MergeAttributes() cleanup

Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>

From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: Robert Haas <robertmhaas@gmail.com>, Alexander Lakhin <exclusion@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>, Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: 2024-05-03T09:32:52Z
Lists: pgsql-hackers
On Fri, May 3, 2024 at 2:47 PM Peter Eisentraut <peter@eisentraut.org>
wrote:

> On 30.04.24 21:48, Robert Haas wrote:
> > I took a look at this patch. Currently this case crashes:
> >
> > CREATE TABLE cmdata(f1 text COMPRESSION pglz);
> > CREATE TABLE cmdata3(f1 text);
> > CREATE TABLE cminh() INHERITS (cmdata, cmdata3);
> >
> > The patch makes this succeed, but I was initially unclear why it
> > didn't make it fail with an error instead: you can argue that cmdata
> > has pglz and cmdata3 has default and those are different. It seems
> > that prior precedent goes both ways -- we treat the absence of a
> > STORAGE specification as STORAGE EXTENDED and it conflicts with an
> > explicit storage specification on some other inheritance parent - but
> > on the other hand, we treat the absence of a default as compatible
> > with any explicit default, similar to what happens here.
>
> The actual behavior here is arguably not ideal.  It was the purpose of
> the other thread mentioned upthread to improve that, but that was not
> successful for the time being.
>
> > So now I think this is committable, but I can't do it now because I
> > won't be around for the next few hours in case the buildfarm blows up.
> > I can do it tomorrow, or perhaps Peter would like to handle it since
> > it seems to have been his commit that introduced the issue.
>
> I have committed it now.
>
>
Thanks Peter.

-- 
Best Wishes,
Ashutosh Bapat

Commits

  1. Fix segmentation fault in MergeInheritedAttribute()

  2. Improve compression and storage support with inheritance

  3. Split some code out from MergeAttributes()

  4. MergeAttributes code deduplication

  5. Add a const decoration

  6. MergeAttributes: convert pg_attribute back to ColumnDef before comparing

  7. Refactor ATExecAddColumn() to use BuildDescForRelation()

  8. Move BuildDescForRelation() from tupdesc.c to tablecmds.c

  9. Push attcompression and attstorage handling into BuildDescForRelation()

  10. Push attidentity and attgenerated handling into BuildDescForRelation()

  11. Add TupleDescGetDefault()

  12. MergeAttributes() and related variable renaming

  13. Clean up MergeCheckConstraint()

  14. Clean up MergeAttributesIntoExisting()

  15. Remove useless if condition

  16. Make more use of makeColumnDef()

  17. Add some const decorations

  18. Remove ancient special case code for dropping oid columns

  19. Remove ancient special case code for adding oid columns

  20. Remove obsolete comment about OID support