summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFujii Masao <fujii@postgresql.org>2025-09-18 11:09:15 +0900
committerFujii Masao <fujii@postgresql.org>2025-09-18 11:09:15 +0900
commit45f50c995fb658bee11bf26b8c6f4983eaa223c0 (patch)
tree84d6c7fb458210c4b22b2f77b4469617d1818fff /src
parent0110e2ec5c0f230beb439885bd1f8505e783e742 (diff)
pg_restore: Fix security label handling with --no-publications/subscriptions.
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
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 93814152a5f..59eaecb4ed7 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -3081,6 +3081,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;