]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pg_restore: Fix security label handling with --no-publications/subscriptions.
authorFujii Masao <fujii@postgresql.org>
Thu, 18 Sep 2025 02:09:15 +0000 (11:09 +0900)
committerFujii Masao <fujii@postgresql.org>
Thu, 18 Sep 2025 02:10:37 +0000 (11:10 +0900)
Previously, pg_restore did not skip security labels on publications or
subscriptions even when --no-publications or --no-subscriptions was specified.
As a result, it could issue SECURITY LABEL commands for objects that were
never created, causing those commands to fail.

This commit fixes the issue by ensuring that security labels on publications
and subscriptions are also skipped when the corresponding options are used.

Backpatch to all supported versions.

Author: Jian He <jian.universality@gmail.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CACJufxHCt00pR9h51AVu6+yPD5J7JQn=7dQXxqacj0XyDhc-fA@mail.gmail.com
Backpatch-through: 13

src/bin/pg_dump/pg_backup_archiver.c

index af2f6074819e3fe83a375a51807d1d293783f8f6..c22dd8f396eb9d9bf2dc13d2a999a4badc83d8aa 100644 (file)
@@ -2885,6 +2885,21 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH)
        if (ropt->no_security_labels && strcmp(te->desc, "SECURITY LABEL") == 0)
                return 0;
 
+       /*
+        * If it's a security label on a publication or a subscription, maybe
+        * ignore it.
+        */
+       if (strcmp(te->desc, "SECURITY LABEL") == 0)
+       {
+               if (ropt->no_publications &&
+                       strncmp(te->tag, "PUBLICATION", strlen("PUBLICATION")) == 0)
+                       return 0;
+
+               if (ropt->no_subscriptions &&
+                       strncmp(te->tag, "SUBSCRIPTION", strlen("SUBSCRIPTION")) == 0)
+                       return 0;
+       }
+
        /* If it's a subscription, maybe ignore it */
        if (ropt->no_subscriptions && strcmp(te->desc, "SUBSCRIPTION") == 0)
                return 0;