From: | Fujii Masao <masao(dot)fujii(at)oss(dot)nttdata(dot)com> |
---|---|
To: | jian he <jian(dot)universality(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_restore --no-policies should not restore policies' comment |
Date: | 2025-06-27 05:34:35 |
Message-ID: | c53868c2-238d-4423-8771-36503b15753b@oss.nttdata.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2025/06/27 13:08, jian he wrote:
> hi.
>
> first looking at function dumpPolicy (pg_dump.c):
>
> appendPQExpBuffer(polprefix, "POLICY %s ON",
> fmtId(polinfo->polname));
> tag = psprintf("%s %s", tbinfo->dobj.name, polinfo->dobj.name);
> ....
> if (polinfo->dobj.dump & DUMP_COMPONENT_COMMENT)
> dumpComment(fout, polprefix->data, qtabname,
> tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
>
>
> then looking at function dumpCommentExtended:
>
> appendPQExpBuffer(query, "COMMENT ON %s ", type);
> if (namespace && *namespace)
> appendPQExpBuffer(query, "%s.", fmtId(namespace));
> appendPQExpBuffer(query, "%s IS ", name);
> appendStringLiteralAH(query, comments->descr, fout);
> appendPQExpBufferStr(query, ";\n");
>
> appendPQExpBuffer(tag, "%s %s", type, name);
> /*
> * We mark comments as SECTION_NONE because they really belong in the
> * same section as their parent, whether that is pre-data or
> * post-data.
> */
> ArchiveEntry(fout, nilCatalogId, createDumpId(),
> ARCHIVE_OPTS(.tag = tag->data,
> .namespace = namespace,
> .owner = owner,
> .description = "COMMENT",
> .section = SECTION_NONE,
> .createStmt = query->data,
> .deps = &dumpId,
> .nDeps = 1));
>
> also looking at function ArchiveEntry in pg_backup_archiver.c
>
> newToc->tag = pg_strdup(opts->tag);
>
>
> if pg_restore --no-policies is specified then we generally don't want
> to restore policies' comments too.
Agreed. Otherwise, pg_restore --no-policies might skip creating
the policy object but still try to run a COMMENT command on it,
which would fail since the policy object doesn't exist.
> To do that, we need
> 1. we checked that COMMENTS on policies, the TocEntry->tag begins with
> "POLICY". which is true, see above code walk through.
> 2. We also need to make sure that no other dumpComment call results in a
> COMMENT command whose TocEntry->tag also starts with "POLICY".
> which is also true, per https://www.postgresql.org/docs/current/sql-comment.html
> after "COMMENT ON", the next word is fixed, and "POLICY" only occurs once.
>
>
> If this is what we want, we can do the same for
> "--no-publications", "--no-subscriptions" too.
Agreed.
Regards,
--
Fujii Masao
NTT DATA Japan Corporation
From | Date | Subject | |
---|---|---|---|
Next Message | Fujii Masao | 2025-06-27 06:11:41 | Re: ALTER TABLE ALTER CONSTRAINT misleading error message |
Previous Message | ikedarintarof | 2025-06-27 05:06:24 | Re: Suggestion to add --continue-client-on-abort option to pgbench |