summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-02-17 18:40:02 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2020-02-17 18:40:02 -0500
commitf9d7bb68da30b9b91e7ac440103a3e5ddeaf412a (patch)
tree3bc8226ab2edc88fb934416f98052cdc08ea8b30 /src
parent1beab076cefe70d90f839583e880bb97af1fa6f5 (diff)
Teach pg_dump to dump comments on RLS policy objects.
This was unaccountably omitted in the original RLS patch. The SQL syntax is basically the same as for comments on triggers, so crib code from dumpTrigger(). Per report from Marc Munro. Back-patch to all supported branches. Discussion: https://postgr.es/m/1581889298.18009.15.camel@bloodnok.com
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index ffc6f0de3bd..894cb919556 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3333,6 +3333,8 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
TableInfo *tbinfo = polinfo->poltable;
PQExpBuffer query;
PQExpBuffer delqry;
+ PQExpBuffer polprefix;
+ char *qtabname;
const char *cmd;
char *tag;
@@ -3390,6 +3392,9 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
query = createPQExpBuffer();
delqry = createPQExpBuffer();
+ polprefix = createPQExpBuffer();
+
+ qtabname = pg_strdup(fmtId(tbinfo->dobj.name));
appendPQExpBuffer(query, "CREATE POLICY %s", fmtId(polinfo->polname));
@@ -3410,6 +3415,9 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
appendPQExpBuffer(delqry, "DROP POLICY %s", fmtId(polinfo->polname));
appendPQExpBuffer(delqry, " ON %s;\n", fmtQualifiedDumpable(tbinfo));
+ appendPQExpBuffer(polprefix, "POLICY %s ON",
+ fmtId(polinfo->polname));
+
tag = psprintf("%s %s", tbinfo->dobj.name, polinfo->dobj.name);
if (polinfo->dobj.dump & DUMP_COMPONENT_POLICY)
@@ -3423,9 +3431,16 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
NULL, 0,
NULL, NULL);
+ if (polinfo->dobj.dump & DUMP_COMPONENT_COMMENT)
+ dumpComment(fout, polprefix->data, qtabname,
+ tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
+ polinfo->dobj.catId, 0, polinfo->dobj.dumpId);
+
free(tag);
destroyPQExpBuffer(query);
destroyPQExpBuffer(delqry);
+ destroyPQExpBuffer(polprefix);
+ free(qtabname);
}
/*