diff options
author | Stephen Frost | 2014-10-03 20:31:53 +0000 |
---|---|---|
committer | Stephen Frost | 2014-10-03 20:31:53 +0000 |
commit | 78d72563ef141ddc507ddd5ae77db613a309041a (patch) | |
tree | 0961d673236ce0e58a76d59b79aff7e1b5235fed /src/bin | |
parent | 596857043023738099d6d16f8edbe6b7353876c0 (diff) |
Fix CreatePolicy, pg_dump -v; psql and doc updates
Peter G pointed out that valgrind was, rightfully, complaining about
CreatePolicy() ending up copying beyond the end of the parsed policy
name. Name is a fixed-size type and we need to use namein (through
DirectFunctionCall1()) to flush out the entire array before we pass
it down to heap_form_tuple.
Michael Paquier pointed out that pg_dump --verbose was missing a
newline and FabrÃzio de Royes Mello further pointed out that the
schema was also missing from the messages, so fix those also.
Also, based on an off-list comment from Kevin, rework the psql \d
output to facilitate copy/pasting into a new CREATE or ALTER POLICY
command.
Lastly, improve the pg_policies view and update the documentation for
it, along with a few other minor doc corrections based on an off-list
discussion with Adam Brightwell.
Diffstat (limited to 'src/bin')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 6 | ||||
-rw-r--r-- | src/bin/psql/describe.c | 28 |
2 files changed, 20 insertions, 14 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 12811a801a3..1a9e82e920e 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -2803,7 +2803,8 @@ getRowSecurity(Archive *fout, TableInfo tblinfo[], int numTables) continue; if (g_verbose) - write_msg(NULL, "reading row-security enabled for table \"%s\"", + write_msg(NULL, "reading row-security enabled for table \"%s\".\"%s\"\n", + tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); /* @@ -2833,7 +2834,8 @@ getRowSecurity(Archive *fout, TableInfo tblinfo[], int numTables) } if (g_verbose) - write_msg(NULL, "reading row-security policies for table \"%s\"\n", + write_msg(NULL, "reading row-security policies for table \"%s\".\"%s\"\n", + tbinfo->dobj.namespace->dobj.name, tbinfo->dobj.name); /* diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 074be576966..267f365170f 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -2011,10 +2011,15 @@ describeOneTableDetails(const char *schemaname, printfPQExpBuffer(&buf, "SELECT rs.rsecpolname,\n" - "CASE WHEN rs.rsecroles = '{0}' THEN NULL ELSE array(select rolname from pg_roles where oid = any (rs.rsecroles) order by 1) END,\n" + "CASE WHEN rs.rsecroles = '{0}' THEN NULL ELSE array_to_string(array(select rolname from pg_roles where oid = any (rs.rsecroles) order by 1),',') END,\n" "pg_catalog.pg_get_expr(rs.rsecqual, rs.rsecrelid),\n" "pg_catalog.pg_get_expr(rs.rsecwithcheck, rs.rsecrelid),\n" - "rs.rseccmd AS cmd\n" + "CASE rs.rseccmd \n" + "WHEN 'r' THEN 'SELECT'\n" + "WHEN 'u' THEN 'UPDATE'\n" + "WHEN 'a' THEN 'INSERT'\n" + "WHEN 'd' THEN 'DELETE'\n" + "END AS cmd\n" "FROM pg_catalog.pg_rowsecurity rs\n" "WHERE rs.rsecrelid = '%s' ORDER BY 1;", oid); @@ -2046,26 +2051,25 @@ describeOneTableDetails(const char *schemaname, PQgetvalue(result, i, 0)); if (!PQgetisnull(result, i, 4)) - appendPQExpBuffer(&buf, " (%s)", + appendPQExpBuffer(&buf, " FOR %s", PQgetvalue(result, i, 4)); + if (!PQgetisnull(result, i, 1)) + { + appendPQExpBuffer(&buf, "\n TO %s", + PQgetvalue(result, i, 1)); + } + if (!PQgetisnull(result, i, 2)) - appendPQExpBuffer(&buf, " EXPRESSION %s", + appendPQExpBuffer(&buf, "\n USING %s", PQgetvalue(result, i, 2)); if (!PQgetisnull(result, i, 3)) - appendPQExpBuffer(&buf, " WITH CHECK %s", + appendPQExpBuffer(&buf, "\n WITH CHECK %s", PQgetvalue(result, i, 3)); printTableAddFooter(&cont, buf.data); - if (!PQgetisnull(result, i, 1)) - { - printfPQExpBuffer(&buf, " APPLIED TO %s", - PQgetvalue(result, i, 1)); - - printTableAddFooter(&cont, buf.data); - } } PQclear(result); } |