Fix pg_dump for better handling of inherited columns.
Tom Lane <tgl@sss.pgh.pa.us>
Fix pg_dump for better handling of inherited columns. Revise pg_dump's handling of inherited columns, which was last looked at seriously in 2001, to eliminate several misbehaviors associated with inherited default expressions and NOT NULL flags. In particular make sure that a column is printed in a child table's CREATE TABLE command if and only if it has attislocal = true; the former behavior would sometimes cause a column to become marked attislocal when it was not so marked in the source database. Also, stop relying on textual comparison of default expressions to decide if they're inherited; instead, don't use default-expression inheritance at all, but just install the default explicitly at each level of the hierarchy. This fixes the search-path-related misbehavior recently exhibited by Chester Young, and also removes some dubious assumptions about the order in which ALTER TABLE SET DEFAULT commands would be executed. Back-patch to all supported branches.
Files
| Path | Change | +/− |
|---|---|---|
| src/bin/pg_dump/common.c | modified | +48 −105 |
| src/bin/pg_dump/pg_dump.c | modified | +107 −41 |
| src/bin/pg_dump/pg_dump.h | modified | +4 −11 |
| src/bin/pg_dump/pg_dump_sort.c | modified | +9 −0 |