OSDN Git Service

Add collations to information_schema.usage_privileges
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 2 Mar 2011 21:10:41 +0000 (23:10 +0200)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 2 Mar 2011 21:17:56 +0000 (23:17 +0200)
This is faked information like for domains.

doc/src/sgml/information_schema.sgml
src/backend/catalog/information_schema.sql

index aa6f852..eba3a0a 100644 (file)
@@ -3560,7 +3560,7 @@ ORDER BY c.ordinal_position;
      <row>
       <entry><literal>object_type</literal></entry>
       <entry><type>character_data</type></entry>
-      <entry><literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal></entry>
+      <entry><literal>COLLATION</literal> or <literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal></entry>
      </row>
 
      <row>
@@ -5497,15 +5497,15 @@ ORDER BY c.ordinal_position;
    <literal>USAGE</literal> privileges granted on various kinds of
    objects to a currently enabled role or by a currently enabled role.
    In <productname>PostgreSQL</productname>, this currently applies to
-   domains, foreign-data wrappers, and foreign servers.  There is one
+   collations, domains, foreign-data wrappers, and foreign servers.  There is one
    row for each combination of object, grantor, and grantee.
   </para>
 
   <para>
-   Since domains do not have real privileges
+   Since collations and domains do not have real privileges
    in <productname>PostgreSQL</productname>, this view shows implicit
    non-grantable <literal>USAGE</literal> privileges granted by the
-   owner to <literal>PUBLIC</literal> for all domains.  The other
+   owner to <literal>PUBLIC</literal> for all collations and domains.  The other
    object types, however, show real privileges.
   </para>
 
@@ -5556,7 +5556,7 @@ ORDER BY c.ordinal_position;
      <row>
       <entry><literal>object_type</literal></entry>
       <entry><type>character_data</type></entry>
-      <entry><literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal></entry>
+      <entry><literal>COLLATION</literal> or <literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal></entry>
      </row>
 
      <row>
index e81a3bb..1c47d81 100644 (file)
@@ -2019,6 +2019,27 @@ GRANT SELECT ON triggers TO PUBLIC;
 
 CREATE VIEW usage_privileges AS
 
+    /* collations */
+    -- Collations have no real privileges, so we represent all collations with implicit usage privilege here.
+    SELECT CAST(u.rolname AS sql_identifier) AS grantor,
+           CAST('PUBLIC' AS sql_identifier) AS grantee,
+           CAST(current_database() AS sql_identifier) AS object_catalog,
+           CAST(n.nspname AS sql_identifier) AS object_schema,
+           CAST(c.collname AS sql_identifier) AS object_name,
+           CAST('COLLATION' AS character_data) AS object_type,
+           CAST('USAGE' AS character_data) AS privilege_type,
+           CAST('NO' AS yes_or_no) AS is_grantable
+
+    FROM pg_authid u,
+         pg_namespace n,
+         pg_collation c
+
+    WHERE u.oid = c.collowner
+          AND c.collnamespace = n.oid
+          AND c.collencoding = (SELECT encoding FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database())
+
+    UNION ALL
+
     /* domains */
     -- Domains have no real privileges, so we represent all domains with implicit usage privilege here.
     SELECT CAST(u.rolname AS sql_identifier) AS grantor,