aboutsummaryrefslogtreecommitdiff
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
commitbd2cd138f9bbaea99f8d632914c33ae5103afa6c (patch)
treef3e21fc86b94de3b4c95a3322aa191c3f29a7a6f /src
parent12bea22a78c147ff3a8cf6db8f03514171952610 (diff)
downloadpostgresql-bd2cd138f9bbaea99f8d632914c33ae5103afa6c.tar.gz
postgresql-bd2cd138f9bbaea99f8d632914c33ae5103afa6c.zip
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 c0c6c9175ed..79a5aa8957e 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3618,6 +3618,8 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
TableInfo *tbinfo = polinfo->poltable;
PQExpBuffer query;
PQExpBuffer delqry;
+ PQExpBuffer polprefix;
+ char *qtabname;
const char *cmd;
char *tag;
@@ -3675,6 +3677,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));
@@ -3695,6 +3700,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)
@@ -3708,9 +3716,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);
}
/*