diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/catalog/system_views.sql | 10 | ||||
-rw-r--r-- | src/backend/commands/policy.c | 2 | ||||
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 6 | ||||
-rw-r--r-- | src/bin/psql/describe.c | 28 | ||||
-rw-r--r-- | src/test/regress/expected/rules.out | 12 |
5 files changed, 33 insertions, 25 deletions
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index da99fd63e82..a819952c75d 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -65,8 +65,9 @@ CREATE VIEW pg_user AS CREATE VIEW pg_policies AS SELECT + N.nspname AS schemaname, + C.relname AS tablename, rs.rsecpolname AS policyname, - (SELECT relname FROM pg_catalog.pg_class WHERE oid = rs.rsecrelid) AS tablename, CASE WHEN rs.rsecroles = '{0}' THEN string_to_array('public', '') @@ -78,8 +79,8 @@ CREATE VIEW pg_policies AS WHERE oid = ANY (rs.rsecroles) ORDER BY 1 ) END AS roles, - CASE WHEN rs.rseccmd IS NULL THEN 'ALL' ELSE - CASE rs.rseccmd + CASE WHEN rs.rseccmd IS NULL THEN 'ALL' ELSE + CASE rs.rseccmd WHEN 'r' THEN 'SELECT' WHEN 'a' THEN 'INSERT' WHEN 'u' THEN 'UPDATE' @@ -89,7 +90,8 @@ CREATE VIEW pg_policies AS pg_catalog.pg_get_expr(rs.rsecqual, rs.rsecrelid) AS qual, pg_catalog.pg_get_expr(rs.rsecwithcheck, rs.rsecrelid) AS with_check FROM pg_catalog.pg_rowsecurity rs - ORDER BY 1; + JOIN pg_catalog.pg_class C ON (C.oid = rs.rsecrelid) + LEFT JOIN pg_catalog.pg_namespace N ON (N.oid = C.relnamespace); CREATE VIEW pg_rules AS SELECT diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 33bf031346f..8e6393c8c0e 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -556,7 +556,7 @@ CreatePolicy(CreatePolicyStmt *stmt) values[Anum_pg_rowsecurity_rsecrelid - 1] = ObjectIdGetDatum(table_id); values[Anum_pg_rowsecurity_rsecpolname - 1] - = CStringGetDatum(stmt->policy_name); + = DirectFunctionCall1(namein, CStringGetDatum(stmt->policy_name)); if (rseccmd) values[Anum_pg_rowsecurity_rseccmd - 1] = CharGetDatum(rseccmd); 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); } diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index c53e7851cc9..c79b45c53a0 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1353,10 +1353,9 @@ pg_matviews| SELECT n.nspname AS schemaname, LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = c.reltablespace))) WHERE (c.relkind = 'm'::"char"); -pg_policies| SELECT rs.rsecpolname AS policyname, - ( SELECT pg_class.relname - FROM pg_class - WHERE (pg_class.oid = rs.rsecrelid)) AS tablename, +pg_policies| SELECT n.nspname AS schemaname, + c.relname AS tablename, + rs.rsecpolname AS policyname, CASE WHEN (rs.rsecroles = '{0}'::oid[]) THEN (string_to_array('public'::text, ''::text))::name[] ELSE ARRAY( SELECT pg_authid.rolname @@ -1377,8 +1376,9 @@ pg_policies| SELECT rs.rsecpolname AS policyname, END AS cmd, pg_get_expr(rs.rsecqual, rs.rsecrelid) AS qual, pg_get_expr(rs.rsecwithcheck, rs.rsecrelid) AS with_check - FROM pg_rowsecurity rs - ORDER BY rs.rsecpolname; + FROM ((pg_rowsecurity rs + JOIN pg_class c ON ((c.oid = rs.rsecrelid))) + LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))); pg_prepared_statements| SELECT p.name, p.statement, p.prepare_time, |