]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Skip SUBSCRIPTION TABLE TOC entries with --no-subscriptions.
authorAmit Kapila <akapila@postgresql.org>
Thu, 30 Jul 2026 06:23:06 +0000 (11:53 +0530)
committerAmit Kapila <akapila@postgresql.org>
Thu, 30 Jul 2026 06:23:06 +0000 (11:53 +0530)
pg_dump in --binary-upgrade mode emits "SUBSCRIPTION TABLE" TOC entries to
preserve pg_subscription_rel state across pg_upgrade.  When such a dump
was restored with --no-subscriptions, _tocEntryRequired() skipped the
"SUBSCRIPTION" entry but not the associated "SUBSCRIPTION TABLE" entries,
so the restore would try to apply subscription-relation state for a
subscription that was never created.

Skip "SUBSCRIPTION TABLE" entries as well when no_subscriptions is set.

This can happen when pg_subscription_rel has entries, the dump is taken
with --binary-upgrade, and it is restored with --no-subscriptions.

Reported-by: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Author: Hayato Kuroda <kuroda.hayato@fujitsu.com>
Reviewed-by: Shlok Kyal <shlok.kyal.oss@gmail.com>
Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Backpatch-through: 17, where it was introduced
Discussion: https://postgr.es/m/OS9PR01MB121493DA4C1A7748B11A646D8F5C02@OS9PR01MB12149.jpnprd01.prod.outlook.com

src/bin/pg_dump/pg_backup_archiver.c

index 607d13a7b5401765ac26d06aff4fccc43234f8d7..d7da3fc4325e714df17530e06104865ddb418bde 100644 (file)
@@ -3094,7 +3094,9 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH)
        }
 
        /* If it's a subscription, maybe ignore it */
-       if (ropt->no_subscriptions && strcmp(te->desc, "SUBSCRIPTION") == 0)
+       if (ropt->no_subscriptions &&
+               (strcmp(te->desc, "SUBSCRIPTION") == 0 ||
+                strcmp(te->desc, "SUBSCRIPTION TABLE") == 0))
                return 0;
 
        /* Ignore it if section is not to be dumped/restored */