Re: pg_restore --no-policies should not restore policies' comment - Mailing list pgsql-hackers

From Fujii Masao
Subject Re: pg_restore --no-policies should not restore policies' comment
Date
Msg-id c53868c2-238d-4423-8771-36503b15753b@oss.nttdata.com
Whole thread Raw
In response to pg_restore --no-policies should not restore policies' comment  (jian he <jian.universality@gmail.com>)
List 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




pgsql-hackers by date:

Previous
From: ikedarintarof
Date:
Subject: Re: Suggestion to add --continue-client-on-abort option to pgbench
Next
From: Dmitry
Date:
Subject: Re: IPC/MultixactCreation on the Standby server