postgrespro.git / summary / log / commit / refs
commit f31364676dfd9e7a2b712ea0da7b4ab6b7d28f5e
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon Feb 17 23:40:02 2020 +0000
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
src/bin/pg_dump/pg_dump.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index ec3e2c63b0..d92a6626a5 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3666,6 +3666,8 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
TableInfo *tbinfo = polinfo->poltable;
PQExpBuffer query;
PQExpBuffer delqry;
+ PQExpBuffer polprefix;
+ char *qtabname;
const char *cmd;
char *tag;
@@ -3723,6 +3725,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));
@@ -3743,6 +3748,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)
@@ -3755,9 +3763,16 @@ dumpPolicy(Archive *fout, PolicyInfo *polinfo)
.createStmt = query->data,
.dropStmt = delqry->data));
+ 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);
}
/*
[parent: c6679e4fca21]