1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-18 04:29:09 +03:00

pg_restore: Fix comment handling with --no-policies.

Previously, pg_restore did not skip comments on policies even when
--no-policies was specified. As a result, it could issue COMMENT commands
for policies that were never created, causing those commands to fail.

This commit fixes the issue by ensuring that comments on policies
are also skipped when --no-policies is used.

Backpatch to v18, where --no-policies was added in pg_restore.

Author: Jian He <jian.universality@gmail.com>
Co-authored-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CACJufxHCt00pR9h51AVu6+yPD5J7JQn=7dQXxqacj0XyDhc-fA@mail.gmail.com
Backpatch-through: 18
This commit is contained in:
Fujii Masao
2025-09-16 11:54:23 +09:00
parent b54e8dbfe3
commit 66dabc06b1
2 changed files with 52 additions and 1 deletions

View File

@@ -3049,10 +3049,15 @@ _tocEntryRequired(TocEntry *te, teSection curSection, ArchiveHandle *AH)
return 0;
/*
* If it's a comment on a publication or a subscription, maybe ignore it.
* If it's a comment on a policy, a publication, or a subscription, maybe
* ignore it.
*/
if (strcmp(te->desc, "COMMENT") == 0)
{
if (ropt->no_policies &&
strncmp(te->tag, "POLICY", strlen("POLICY")) == 0)
return 0;
if (ropt->no_publications &&
strncmp(te->tag, "PUBLICATION", strlen("PUBLICATION")) == 0)
return 0;

View File

@@ -632,6 +632,23 @@ my %pgdump_runs = (
'postgres',
],
},
no_policies_restore => {
dump_cmd => [
'pg_dump', '--no-sync',
'--format' => 'custom',
'--file' => "$tempdir/no_policies_restore.dump",
'--statistics',
'postgres',
],
restore_cmd => [
'pg_restore',
'--format' => 'custom',
'--file' => "$tempdir/no_policies_restore.sql",
'--no-policies',
'--statistics',
"$tempdir/no_policies_restore.dump",
],
},
no_privs => {
dump_cmd => [
'pg_dump', '--no-sync',
@@ -897,6 +914,7 @@ my %full_runs = (
no_large_objects => 1,
no_owner => 1,
no_policies => 1,
no_policies_restore => 1,
no_privs => 1,
no_statistics => 1,
no_subscriptions => 1,
@@ -1540,6 +1558,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -1858,6 +1877,27 @@ my %tests = (
},
},
'COMMENT ON POLICY p1' => {
create_order => 55,
create_sql => 'COMMENT ON POLICY p1 ON dump_test.test_table
IS \'comment on policy\';',
regexp =>
qr/^COMMENT ON POLICY p1 ON dump_test.test_table IS 'comment on policy';/m,
like => {
%full_runs,
%dump_test_schema_runs,
only_dump_test_table => 1,
section_post_data => 1,
},
unlike => {
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
'COMMENT ON PUBLICATION pub1' => {
create_order => 55,
create_sql => 'COMMENT ON PUBLICATION pub1
@@ -3224,6 +3264,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3246,6 +3287,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3268,6 +3310,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3290,6 +3333,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3312,6 +3356,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},
@@ -3334,6 +3379,7 @@ my %tests = (
exclude_dump_test_schema => 1,
exclude_test_table => 1,
no_policies => 1,
no_policies_restore => 1,
only_dump_measurement => 1,
},
},