diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2013-09-09 22:25:37 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2013-09-09 22:25:37 -0400 |
commit | b34f8f409bec4921d260ac84668917f5fff04319 (patch) | |
tree | ef325d32b353ca3f88c50d9d6746acd4024a140c | |
parent | 71901ab6daaad65c0168c05e016e4208efe5b71a (diff) | |
download | postgresql-b34f8f409bec4921d260ac84668917f5fff04319.tar.gz postgresql-b34f8f409bec4921d260ac84668917f5fff04319.zip |
Show schemas in information_schema.schemata that the current has access to
Before, it would only show schemas that the current user owns. Per
discussion, the new behavior is more useful and consistent for PostgreSQL.
-rw-r--r-- | doc/src/sgml/information_schema.sgml | 5 | ||||
-rw-r--r-- | src/backend/catalog/information_schema.sql | 4 |
2 files changed, 6 insertions, 3 deletions
diff --git a/doc/src/sgml/information_schema.sgml b/doc/src/sgml/information_schema.sgml index 3ac555dad37..22e17bb5e69 100644 --- a/doc/src/sgml/information_schema.sgml +++ b/doc/src/sgml/information_schema.sgml @@ -4547,8 +4547,9 @@ ORDER BY c.ordinal_position; <title><literal>schemata</literal></title> <para> - The view <literal>schemata</literal> contains all schemas in the - current database that are owned by a currently enabled role. + The view <literal>schemata</literal> contains all schemas in the current + database that the current user has access to (by way of being the owner or + having some privilege). </para> <table> diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql index 95f267f224e..c5f7a8b2100 100644 --- a/src/backend/catalog/information_schema.sql +++ b/src/backend/catalog/information_schema.sql @@ -1502,7 +1502,9 @@ CREATE VIEW schemata AS CAST(null AS sql_identifier) AS default_character_set_name, CAST(null AS character_data) AS sql_path FROM pg_namespace n, pg_authid u - WHERE n.nspowner = u.oid AND pg_has_role(n.nspowner, 'USAGE'); + WHERE n.nspowner = u.oid + AND (pg_has_role(n.nspowner, 'USAGE') + OR has_schema_privilege(n.oid, 'CREATE, USAGE')); GRANT SELECT ON schemata TO PUBLIC; |