Re: pg_restore --no-policies should not restore policies' comment
От | Fujii Masao |
---|---|
Тема | Re: pg_restore --no-policies should not restore policies' comment |
Дата | |
Msg-id | c53868c2-238d-4423-8771-36503b15753b@oss.nttdata.com обсуждение исходный текст |
Ответ на | pg_restore --no-policies should not restore policies' comment (jian he <jian.universality@gmail.com>) |
Список | 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 по дате отправления: