From feb270d1005f3d7b3705dec9e04c9a205750ea97 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 4 May 2021 14:03:54 +0200 Subject: [PATCH] pg_dump: Fix dump of generated columns in partitions The previous fix for dumping of inherited generated columns (0bf83648a52df96f7c8677edbbdf141bfa0cf32b) must not be applied to partitions, since, unlike normal inherited tables, they are always dumped separately and reattached. Reported-by: Santosh Udupi Discussion: https://www.postgresql.org/message-id/flat/CACLRvHZ4a-%2BSM_159%2BtcrHdEqxFrG%3DW4gwTRnwf7Oj0UNj5R2A%40mail.gmail.com --- src/bin/pg_dump/common.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 1a261a5545..7fcd2014e7 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -480,9 +480,11 @@ flagInhIndexes(Archive *fout, TableInfo tblinfo[], int numTables) * - Detect child columns that have a generation expression when their parents * also have one. Generation expressions are always inherited, so there is * no need to set them again in child tables, and there is no syntax for it - * either. (Exception: In binary upgrade mode we dump them because - * inherited tables are recreated standalone first and then reattached to - * the parent.) + * either. Exceptions: If it's a partition or we are in binary upgrade + * mode, we dump them because in those cases inherited tables are recreated + * standalone first and then reattached to the parent. (See also the logic + * in dumpTableSchema().) In that situation, the generation expressions + * must match the parent, enforced by ALTER TABLE. * * modifies tblinfo */ @@ -585,7 +587,7 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables) } /* Remove generation expression from child */ - if (foundGenerated && !dopt->binary_upgrade) + if (foundGenerated && !tbinfo->ispartition && !dopt->binary_upgrade) tbinfo->attrdefs[j] = NULL; } }