Teach pg_dump to dump comments on RLS policy objects.
authorTom Lane
Mon, 17 Feb 2020 23:40:02 +0000 (18:40 -0500)
committerTom Lane
Mon, 17 Feb 2020 23:40:02 +0000 (18:40 -0500)
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[email protected]

src/bin/pg_dump/pg_dump.c

index ffc6f0de3bddfb6ebef78659edea21f9d7b129b7..894cb919556e56510ae13789e7efa07ce06175a0 100644 (file)
@@ -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);
 }
 
 /*