]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Teach pg_dump to dump comments on RLS policy objects.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 17 Feb 2020 23:40:02 +0000 (18:40 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
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.18009.15.camel@bloodnok.com

src/bin/pg_dump/pg_dump.c

index c0c6c9175ed107ef5a4457dae04f2da1006166ab..79a5aa8957e70f820ca13ce45f6d196b1b0816e0 100644 (file)
@@ -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);
 }
 
 /*