OSDN Git Service

Add composite-type attributes to information_schema.element_types view
authorPeter Eisentraut <peter_e@gmx.net>
Tue, 28 Jun 2011 13:07:23 +0000 (16:07 +0300)
committerPeter Eisentraut <peter_e@gmx.net>
Tue, 28 Jun 2011 13:08:52 +0000 (16:08 +0300)
doc/src/sgml/information_schema.sgml
src/backend/catalog/information_schema.sql

index ab9ce2a..396d3e7 100644 (file)
 
   <para>
    The view <literal>element_types</literal> contains the data type
-   descriptors of the elements of arrays.  When a table column,
+   descriptors of the elements of arrays.  When a table column, composite-type attribute,
    domain, function parameter, or function return value is defined to
    be of an array type, the respective information schema view only
    contains <literal>ARRAY</literal> in the column
@@ -2212,9 +2212,11 @@ ORDER BY c.ordinal_position;
       <entry>
        The type of the object that uses the array being described: one
        of <literal>TABLE</literal> (the array is used by a column of
-       that table), <literal>DOMAIN</literal> (the array is used by
-       that domain), <literal>ROUTINE</literal> (the array is used by
-       a parameter or the return data type of that function).
+       that table), <literal>USER-DEFINED TYPE</literal> (the array is
+       used by an attribute of that composite type),
+       <literal>DOMAIN</literal> (the array is used by that domain),
+       <literal>ROUTINE</literal> (the array is used by a parameter or
+       the return data type of that function).
       </entry>
      </row>
 
index 9334c76..c7ccea3 100644 (file)
@@ -2467,12 +2467,13 @@ CREATE VIEW element_types AS
 
     FROM pg_namespace n, pg_type at, pg_namespace nbt, pg_type bt,
          (
-           /* columns */
+           /* columns, attributes */
            SELECT c.relnamespace, CAST(c.relname AS sql_identifier),
-                  'TABLE'::text, a.attnum, a.atttypid
+                  CASE WHEN c.relkind = 'c' THEN 'USER-DEFINED TYPE'::text ELSE 'TABLE'::text END,
+                  a.attnum, a.atttypid
            FROM pg_class c, pg_attribute a
            WHERE c.oid = a.attrelid
-                 AND c.relkind IN ('r', 'v', 'f')
+                 AND c.relkind IN ('r', 'v', 'f', 'c')
                  AND attnum > 0 AND NOT attisdropped
 
            UNION ALL