pg_dump: Fix dump of generated columns in partitions
authorPeter Eisentraut
Tue, 4 May 2021 12:03:54 +0000 (14:03 +0200)
committerPeter Eisentraut
Tue, 4 May 2021 12:18:23 +0000 (14:18 +0200)
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

index 3f3a24493e72212030dfee72ae00ec42f9c9b31b..c9f7999d87ec0ce0b75bcc9c23f38001c3b834fb 100644 (file)
@@ -444,9 +444,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
  */
@@ -549,7 +551,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;
        }
    }