Commit d1ba2942 authored by Peter Eisentraut's avatar Peter Eisentraut

Update information schema to SQL:2008

 - yes_or_no domain for "boolean" data
 - new columns for VIEWS view
 - slight section renumbering
parent dcc9d373
<!-- $PostgreSQL: pgsql/doc/src/sgml/information_schema.sgml,v 1.40 2009/07/07 18:23:13 petere Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/information_schema.sgml,v 1.41 2009/07/13 20:25:57 petere Exp $ -->
<chapter id="information-schema">
<title>The Information Schema</title>
......@@ -96,19 +96,24 @@
</para>
</listitem>
</varlistentry>
</variablelist>
Every column in the information schema has one of these four types.
</para>
<varlistentry>
<term><type>yes_or_no</type></term>
<listitem>
<para>
A character string domain that contains
either <literal>YES</literal> or <literal>NO</literal>. This
is used to represent Boolean (true/false) data in the
information schema. (The information schema was invented
before the type <type>boolean</type> was added to the SQL
standard, so this convention is necessary to keep the
information schema backward compatible.)
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
Boolean (true/false) data is represented in the information schema
by a column of type <type>character_data</type> that contains
either <literal>YES</literal> or <literal>NO</literal>. (The
information schema was invented before the type
<type>boolean</type> was added to the SQL standard, so this
convention is necessary to keep the information schema backward
compatible.)
Every column in the information schema has one of these five types.
</para>
</sect1>
......@@ -184,7 +189,7 @@
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Always <literal>YES</literal></entry>
</row>
</tbody>
......@@ -236,7 +241,7 @@
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the grantee has the admin option on
the role, <literal>NO</literal> if not
......@@ -308,7 +313,7 @@
<row>
<entry><literal>is_nullable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the attribute is possibly nullable,
<literal>NO</literal> if it is known not nullable.
......@@ -480,7 +485,7 @@
<row>
<entry><literal>is_derived_reference_attribute</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
</tbody>
......@@ -757,7 +762,7 @@
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -907,7 +912,7 @@
<row>
<entry><literal>is_nullable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the column is possibly nullable,
<literal>NO</literal> if it is known not nullable. A not-null
......@@ -1148,13 +1153,13 @@
<row>
<entry><literal>is_self_referencing</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
<row>
<entry><literal>is_identity</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -1190,7 +1195,7 @@
<row>
<entry><literal>identity_cycle</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -1208,7 +1213,7 @@
<row>
<entry><literal>is_updatable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the column is updatable,
<literal>NO</literal> if not (Columns in base tables are always
......@@ -1544,13 +1549,13 @@
<row>
<entry><literal>is_deferrable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the constraint is deferrable, <literal>NO</literal> if not</entry>
</row>
<row>
<entry><literal>initially_deferred</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the constraint is deferrable and initially deferred, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -2545,13 +2550,13 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_result</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
<row>
<entry><literal>as_locator</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -2902,7 +2907,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -2992,7 +2997,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -3066,13 +3071,13 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
<row>
<entry><literal>with_hierarchy</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
</tbody>
......@@ -3149,7 +3154,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -3239,7 +3244,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -3568,7 +3573,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_deterministic</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
If the function is declared immutable (called deterministic in
the SQL standard), then <literal>YES</literal>, else
......@@ -3589,7 +3594,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_null_call</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
If the function automatically returns null if any of its
arguments are null, then <literal>YES</literal>, else
......@@ -3605,7 +3610,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>schema_level_routine</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
Always <literal>YES</literal> (The opposite would be a method
of a user-defined type, which is a feature not available in
......@@ -3621,13 +3626,13 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_user_defined_cast</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
<row>
<entry><literal>is_implicitly_invocable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -3662,7 +3667,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>as_locator</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -3680,13 +3685,13 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>new_savepoint_level</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
<row>
<entry><literal>is_udt_dependent</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -3698,7 +3703,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>result_cast_as_locator</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -4012,7 +4017,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>cycle_option</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Not yet implemented</entry>
</row>
</tbody>
......@@ -4070,7 +4075,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_supported</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the feature is fully supported by the
current version of <productname>PostgreSQL</>, <literal>NO</literal> if not
......@@ -4289,7 +4294,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_supported</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the package is fully supported by the
current version of <productname>PostgreSQL</>, <literal>NO</literal> if not
......@@ -4351,7 +4356,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_supported</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the part is fully supported by the
current version of <productname>PostgreSQL</>,
......@@ -4569,13 +4574,13 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_deferrable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the constraint is deferrable, <literal>NO</literal> if not</entry>
</row>
<row>
<entry><literal>initially_deferred</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the constraint is deferrable and initially deferred, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -4649,13 +4654,13 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
<row>
<entry><literal>with_hierarchy</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
</tbody>
......@@ -4747,7 +4752,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_insertable_into</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the table is insertable into,
<literal>NO</literal> if not (Base tables are always insertable
......@@ -4757,7 +4762,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_typed</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
......@@ -5025,7 +5030,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_grantable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry><literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not</entry>
</row>
</tbody>
......@@ -5434,7 +5439,7 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_updatable</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the view is updatable (allows
<command>UPDATE</command> and <command>DELETE</command>),
......@@ -5444,12 +5449,30 @@ ORDER BY c.ordinal_position;
<row>
<entry><literal>is_insertable_into</literal></entry>
<entry><type>character_data</type></entry>
<entry><type>yes_or_no</type></entry>
<entry>
<literal>YES</literal> if the view is insertable into (allows
<command>INSERT</command>), <literal>NO</literal> if not
</entry>
</row>
<row>
<entry><literal>is_trigger_updatable</literal></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
<row>
<entry><literal>is_trigger_deletable</literal></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
<row>
<entry><literal>is_trigger_insertable_into</literal></entry>
<entry><type>yes_or_no</type></entry>
<entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
</row>
</tbody>
</tgroup>
</table>
......
/*
* SQL Information Schema
* as defined in ISO/IEC 9075-11:2003
* as defined in ISO/IEC 9075-11:2008
*
* Copyright (c) 2003-2009, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.56 2009/07/07 19:28:00 tgl Exp $
* $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.57 2009/07/13 20:25:57 petere Exp $
*/
/*
......@@ -221,19 +221,27 @@ GRANT SELECT ON information_schema_catalog_name TO PUBLIC;
CREATE DOMAIN time_stamp AS timestamp(2) with time zone
DEFAULT current_timestamp(2);
/*
* 5.7
* YES_OR_NO domain
*/
CREATE DOMAIN yes_or_no AS character varying(3)
CONSTRAINT yes_or_no_check CHECK (value IN ('YES', 'NO'));
-- 5.7 ADMINISTRABLE_ROLE_AUTHORIZATIONS view appears later.
-- 5.8 ADMINISTRABLE_ROLE_AUTHORIZATIONS view appears later.
/*
* 5.8
* 5.9
* APPLICABLE_ROLES view
*/
CREATE VIEW applicable_roles AS
SELECT CAST(a.rolname AS sql_identifier) AS grantee,
CAST(b.rolname AS sql_identifier) AS role_name,
CAST(CASE WHEN m.admin_option THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
CAST(CASE WHEN m.admin_option THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_auth_members m
JOIN pg_authid a ON (m.member = a.oid)
JOIN pg_authid b ON (m.roleid = b.oid)
......@@ -243,7 +251,7 @@ GRANT SELECT ON applicable_roles TO PUBLIC;
/*
* 5.7
* 5.8
* ADMINISTRABLE_ROLE_AUTHORIZATIONS view
*/
......@@ -256,7 +264,7 @@ GRANT SELECT ON administrable_role_authorizations TO PUBLIC;
/*
* 5.9
* 5.10
* ASSERTIONS view
*/
......@@ -264,7 +272,7 @@ GRANT SELECT ON administrable_role_authorizations TO PUBLIC;
/*
* 5.10
* 5.11
* ATTRIBUTES view
*/
......@@ -276,7 +284,7 @@ CREATE VIEW attributes AS
CAST(a.attnum AS cardinal_number) AS ordinal_position,
CAST(pg_get_expr(ad.adbin, ad.adrelid) AS character_data) AS attribute_default,
CAST(CASE WHEN a.attnotnull OR (t.typtype = 'd' AND t.typnotnull) THEN 'NO' ELSE 'YES' END
AS character_data)
AS yes_or_no)
AS is_nullable,
CAST(
......@@ -337,7 +345,7 @@ CREATE VIEW attributes AS
CAST(null AS cardinal_number) AS maximum_cardinality,
CAST(a.attnum AS sql_identifier) AS dtd_identifier,
CAST('NO' AS character_data) AS is_derived_reference_attribute
CAST('NO' AS yes_or_no) AS is_derived_reference_attribute
FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum),
pg_class c, pg_namespace nc,
......@@ -353,7 +361,7 @@ GRANT SELECT ON attributes TO PUBLIC;
/*
* 5.11
* 5.12
* CHARACTER_SETS view
*/
......@@ -361,7 +369,7 @@ GRANT SELECT ON attributes TO PUBLIC;
/*
* 5.12
* 5.13
* CHECK_CONSTRAINT_ROUTINE_USAGE view
*/
......@@ -386,7 +394,7 @@ GRANT SELECT ON check_constraint_routine_usage TO PUBLIC;
/*
* 5.13
* 5.14
* CHECK_CONSTRAINTS view
*/
......@@ -424,14 +432,14 @@ GRANT SELECT ON check_constraints TO PUBLIC;
/*
* 5.14
* 5.15
* COLLATIONS view
*/
-- feature not supported
/*
* 5.15
* 5.16
* COLLATION_CHARACTER_SET_APPLICABILITY view
*/
......@@ -439,7 +447,7 @@ GRANT SELECT ON check_constraints TO PUBLIC;
/*
* 5.16
* 5.17
* COLUMN_COLUMN_USAGE view
*/
......@@ -447,7 +455,7 @@ GRANT SELECT ON check_constraints TO PUBLIC;
/*
* 5.17
* 5.18
* COLUMN_DOMAIN_USAGE view
*/
......@@ -477,7 +485,7 @@ GRANT SELECT ON column_domain_usage TO PUBLIC;
/*
* 5.18
* 5.19
* COLUMN_PRIVILEGES
*/
......@@ -497,7 +505,7 @@ CREATE VIEW column_privileges AS
makeaclitem(grantee.oid, u_grantor.oid, pr.type, true))
OR aclcontains(a.attacl,
makeaclitem(grantee.oid, u_grantor.oid, pr.type, true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_attribute a,
pg_class c,
......@@ -530,7 +538,7 @@ GRANT SELECT ON column_privileges TO PUBLIC;
/*
* 5.19
* 5.20
* COLUMN_UDT_USAGE view
*/
......@@ -558,7 +566,7 @@ GRANT SELECT ON column_udt_usage TO PUBLIC;
/*
* 5.20
* 5.21
* COLUMNS view
*/
......@@ -570,7 +578,7 @@ CREATE VIEW columns AS
CAST(a.attnum AS cardinal_number) AS ordinal_position,
CAST(pg_get_expr(ad.adbin, ad.adrelid) AS character_data) AS column_default,
CAST(CASE WHEN a.attnotnull OR (t.typtype = 'd' AND t.typnotnull) THEN 'NO' ELSE 'YES' END
AS character_data)
AS yes_or_no)
AS is_nullable,
CAST(
......@@ -644,15 +652,15 @@ CREATE VIEW columns AS
CAST(null AS cardinal_number) AS maximum_cardinality,
CAST(a.attnum AS sql_identifier) AS dtd_identifier,
CAST('NO' AS character_data) AS is_self_referencing,
CAST('NO' AS yes_or_no) AS is_self_referencing,
CAST('NO' AS character_data) AS is_identity,
CAST('NO' AS yes_or_no) AS is_identity,
CAST(null AS character_data) AS identity_generation,
CAST(null AS character_data) AS identity_start,
CAST(null AS character_data) AS identity_increment,
CAST(null AS character_data) AS identity_maximum,
CAST(null AS character_data) AS identity_minimum,
CAST(null AS character_data) AS identity_cycle,
CAST(null AS yes_or_no) AS identity_cycle,
CAST('NEVER' AS character_data) AS is_generated,
CAST(null AS character_data) AS generation_expression,
......@@ -661,7 +669,7 @@ CREATE VIEW columns AS
OR (c.relkind = 'v'
AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '2' AND is_instead)
AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '4' AND is_instead))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_updatable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_updatable
FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum),
pg_class c, pg_namespace nc,
......@@ -684,7 +692,7 @@ GRANT SELECT ON columns TO PUBLIC;
/*
* 5.21
* 5.22
* CONSTRAINT_COLUMN_USAGE view
*/
......@@ -736,7 +744,7 @@ GRANT SELECT ON constraint_column_usage TO PUBLIC;
/*
* 5.22
* 5.23
* CONSTRAINT_TABLE_USAGE view
*/
......@@ -760,11 +768,11 @@ CREATE VIEW constraint_table_usage AS
GRANT SELECT ON constraint_table_usage TO PUBLIC;
-- 5.23 DATA_TYPE_PRIVILEGES view appears later.
-- 5.24 DATA_TYPE_PRIVILEGES view appears later.
/*
* 5.24
* 5.25
* DIRECT_SUPERTABLES view
*/
......@@ -772,7 +780,7 @@ GRANT SELECT ON constraint_table_usage TO PUBLIC;
/*
* 5.25
* 5.26
* DIRECT_SUPERTYPES view
*/
......@@ -780,7 +788,7 @@ GRANT SELECT ON constraint_table_usage TO PUBLIC;
/*
* 5.26
* 5.27
* DOMAIN_CONSTRAINTS view
*/
......@@ -792,9 +800,9 @@ CREATE VIEW domain_constraints AS
CAST(n.nspname AS sql_identifier) AS domain_schema,
CAST(t.typname AS sql_identifier) AS domain_name,
CAST(CASE WHEN condeferrable THEN 'YES' ELSE 'NO' END
AS character_data) AS is_deferrable,
AS yes_or_no) AS is_deferrable,
CAST(CASE WHEN condeferred THEN 'YES' ELSE 'NO' END
AS character_data) AS initially_deferred
AS yes_or_no) AS initially_deferred
FROM pg_namespace rs, pg_namespace n, pg_constraint con, pg_type t
WHERE rs.oid = con.connamespace
AND n.oid = t.typnamespace
......@@ -829,7 +837,7 @@ GRANT SELECT ON domain_udt_usage TO PUBLIC;
/*
* 5.27
* 5.28
* DOMAINS view
*/
......@@ -910,11 +918,11 @@ CREATE VIEW domains AS
GRANT SELECT ON domains TO PUBLIC;
-- 5.28 ELEMENT_TYPES view appears later.
-- 5.29 ELEMENT_TYPES view appears later.
/*
* 5.29
* 5.30
* ENABLED_ROLES view
*/
......@@ -927,7 +935,7 @@ GRANT SELECT ON enabled_roles TO PUBLIC;
/*
* 5.30
* 5.31
* FIELDS view
*/
......@@ -935,7 +943,7 @@ GRANT SELECT ON enabled_roles TO PUBLIC;
/*
* 5.31
* 5.32
* KEY_COLUMN_USAGE view
*/
......@@ -978,7 +986,7 @@ GRANT SELECT ON key_column_usage TO PUBLIC;
/*
* 5.32
* 5.33
* METHOD_SPECIFICATION_PARAMETERS view
*/
......@@ -986,7 +994,7 @@ GRANT SELECT ON key_column_usage TO PUBLIC;
/*
* 5.33
* 5.34
* METHOD_SPECIFICATIONS view
*/
......@@ -994,7 +1002,7 @@ GRANT SELECT ON key_column_usage TO PUBLIC;
/*
* 5.34
* 5.35
* PARAMETERS view
*/
......@@ -1011,8 +1019,8 @@ CREATE VIEW parameters AS
WHEN proargmodes[(ss.x).n] = 'v' THEN 'IN'
WHEN proargmodes[(ss.x).n] = 't' THEN 'OUT'
END AS character_data) AS parameter_mode,
CAST('NO' AS character_data) AS is_result,
CAST('NO' AS character_data) AS as_locator,
CAST('NO' AS yes_or_no) AS is_result,
CAST('NO' AS yes_or_no) AS as_locator,
CAST(NULLIF(proargnames[(ss.x).n], '') AS sql_identifier) AS parameter_name,
CAST(
CASE WHEN t.typelem <> 0 AND t.typlen = -1 THEN 'ARRAY'
......@@ -1056,7 +1064,7 @@ GRANT SELECT ON parameters TO PUBLIC;
/*
* 5.35
* 5.36
* REFERENCED_TYPES view
*/
......@@ -1064,7 +1072,7 @@ GRANT SELECT ON parameters TO PUBLIC;
/*
* 5.36
* 5.37
* REFERENTIAL_CONSTRAINTS view
*/
......@@ -1122,7 +1130,7 @@ GRANT SELECT ON referential_constraints TO PUBLIC;
/*
* 5.37
* 5.38
* ROLE_COLUMN_GRANTS view
*/
......@@ -1142,7 +1150,7 @@ CREATE VIEW role_column_grants AS
makeaclitem(g_grantee.oid, u_grantor.oid, pr.type, true))
OR aclcontains(a.attacl,
makeaclitem(g_grantee.oid, u_grantor.oid, pr.type, true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_attribute a,
pg_class c,
......@@ -1170,7 +1178,7 @@ GRANT SELECT ON role_column_grants TO PUBLIC;
/*
* 5.38
* 5.39
* ROLE_ROUTINE_GRANTS view
*/
......@@ -1190,7 +1198,7 @@ CREATE VIEW role_routine_grants AS
pg_has_role(g_grantee.oid, p.proowner, 'USAGE')
OR aclcontains(p.proacl,
makeaclitem(g_grantee.oid, u_grantor.oid, 'EXECUTE', true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_proc p,
pg_namespace n,
......@@ -1207,7 +1215,7 @@ GRANT SELECT ON role_routine_grants TO PUBLIC;
/*
* 5.39
* 5.40
* ROLE_TABLE_GRANTS view
*/
......@@ -1224,8 +1232,8 @@ CREATE VIEW role_table_grants AS
pg_has_role(g_grantee.oid, c.relowner, 'USAGE')
OR aclcontains(c.relacl,
makeaclitem(g_grantee.oid, u_grantor.oid, pr.type, true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable,
CAST('NO' AS character_data) AS with_hierarchy
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable,
CAST('NO' AS yes_or_no) AS with_hierarchy
FROM pg_class c,
pg_namespace nc,
......@@ -1250,7 +1258,7 @@ GRANT SELECT ON role_table_grants TO PUBLIC;
/*
* 5.40
* 5.41
* ROLE_TABLE_METHOD_GRANTS view
*/
......@@ -1258,7 +1266,7 @@ GRANT SELECT ON role_table_grants TO PUBLIC;
/*
* 5.41
* 5.42
* ROLE_USAGE_GRANTS view
*/
......@@ -1278,7 +1286,7 @@ CREATE VIEW role_usage_grants AS
pg_has_role(g_grantee.oid, fdw.fdwowner, 'USAGE')
OR aclcontains(fdw.fdwacl,
makeaclitem(g_grantee.oid, u_grantor.oid, 'USAGE', true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_foreign_data_wrapper fdw,
pg_authid u_grantor,
......@@ -1305,7 +1313,7 @@ CREATE VIEW role_usage_grants AS
pg_has_role(g_grantee.oid, srv.srvowner, 'USAGE')
OR aclcontains(srv.srvacl,
makeaclitem(g_grantee.oid, u_grantor.oid, 'USAGE', true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_foreign_server srv,
pg_authid u_grantor,
......@@ -1320,7 +1328,7 @@ GRANT SELECT ON role_usage_grants TO PUBLIC;
/*
* 5.42
* 5.43
* ROLE_UDT_GRANTS view
*/
......@@ -1328,7 +1336,7 @@ GRANT SELECT ON role_usage_grants TO PUBLIC;
/*
* 5.43
* 5.44
* ROUTINE_COLUMN_USAGE view
*/
......@@ -1336,7 +1344,7 @@ GRANT SELECT ON role_usage_grants TO PUBLIC;
/*
* 5.44
* 5.45
* ROUTINE_PRIVILEGES view
*/
......@@ -1356,7 +1364,7 @@ CREATE VIEW routine_privileges AS
pg_has_role(grantee.oid, p.proowner, 'USAGE')
OR aclcontains(p.proacl,
makeaclitem(grantee.oid, u_grantor.oid, 'EXECUTE', true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_proc p,
pg_namespace n,
......@@ -1378,7 +1386,7 @@ GRANT SELECT ON routine_privileges TO PUBLIC;
/*
* 5.45
* 5.46
* ROUTINE_ROUTINE_USAGE view
*/
......@@ -1386,7 +1394,7 @@ GRANT SELECT ON routine_privileges TO PUBLIC;
/*
* 5.46
* 5.47
* ROUTINE_SEQUENCE_USAGE view
*/
......@@ -1394,7 +1402,7 @@ GRANT SELECT ON routine_privileges TO PUBLIC;
/*
* 5.47
* 5.48
* ROUTINE_TABLE_USAGE view
*/
......@@ -1402,7 +1410,7 @@ GRANT SELECT ON routine_privileges TO PUBLIC;
/*
* 5.48
* 5.49
* ROUTINES view
*/
......@@ -1460,26 +1468,26 @@ CREATE VIEW routines AS
CAST(upper(l.lanname) AS character_data) AS external_language,
CAST('GENERAL' AS character_data) AS parameter_style,
CAST(CASE WHEN p.provolatile = 'i' THEN 'YES' ELSE 'NO' END AS character_data) AS is_deterministic,
CAST(CASE WHEN p.provolatile = 'i' THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_deterministic,
CAST('MODIFIES' AS character_data) AS sql_data_access,
CAST(CASE WHEN p.proisstrict THEN 'YES' ELSE 'NO' END AS character_data) AS is_null_call,
CAST(CASE WHEN p.proisstrict THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_null_call,
CAST(null AS character_data) AS sql_path,
CAST('YES' AS character_data) AS schema_level_routine,
CAST('YES' AS yes_or_no) AS schema_level_routine,
CAST(0 AS cardinal_number) AS max_dynamic_result_sets,
CAST(null AS character_data) AS is_user_defined_cast,
CAST(null AS character_data) AS is_implicitly_invocable,
CAST(null AS yes_or_no) AS is_user_defined_cast,
CAST(null AS yes_or_no) AS is_implicitly_invocable,
CAST(CASE WHEN p.prosecdef THEN 'DEFINER' ELSE 'INVOKER' END AS character_data) AS security_type,
CAST(null AS sql_identifier) AS to_sql_specific_catalog,
CAST(null AS sql_identifier) AS to_sql_specific_schema,
CAST(null AS sql_identifier) AS to_sql_specific_name,
CAST('NO' AS character_data) AS as_locator,
CAST('NO' AS yes_or_no) AS as_locator,
CAST(null AS time_stamp) AS created,
CAST(null AS time_stamp) AS last_altered,
CAST(null AS character_data) AS new_savepoint_level,
CAST('YES' AS character_data) AS is_udt_dependent, -- FIXME?
CAST(null AS yes_or_no) AS new_savepoint_level,
CAST('YES' AS yes_or_no) AS is_udt_dependent, -- FIXME?
CAST(null AS character_data) AS result_cast_from_data_type,
CAST(null AS character_data) AS result_cast_as_locator,
CAST(null AS yes_or_no) AS result_cast_as_locator,
CAST(null AS cardinal_number) AS result_cast_char_max_length,
CAST(null AS cardinal_number) AS result_cast_char_octet_length,
CAST(null AS sql_identifier) AS result_cast_char_set_catalog,
......@@ -1515,7 +1523,7 @@ GRANT SELECT ON routines TO PUBLIC;
/*
* 5.49
* 5.50
* SCHEMATA view
*/
......@@ -1534,7 +1542,7 @@ GRANT SELECT ON schemata TO PUBLIC;
/*
* 5.50
* 5.51
* SEQUENCES view
*/
......@@ -1549,7 +1557,7 @@ CREATE VIEW sequences AS
CAST(null AS cardinal_number) AS maximum_value, -- FIXME
CAST(null AS cardinal_number) AS minimum_value, -- FIXME
CAST(null AS cardinal_number) AS increment, -- FIXME
CAST(null AS character_data) AS cycle_option -- FIXME
CAST(null AS yes_or_no) AS cycle_option -- FIXME
FROM pg_namespace nc, pg_class c
WHERE c.relnamespace = nc.oid
AND c.relkind = 'S'
......@@ -1561,7 +1569,7 @@ GRANT SELECT ON sequences TO PUBLIC;
/*
* 5.51
* 5.52
* SQL_FEATURES table
*/
......@@ -1570,7 +1578,7 @@ CREATE TABLE sql_features (
feature_name character_data,
sub_feature_id character_data,
sub_feature_name character_data,
is_supported character_data,
is_supported yes_or_no,
is_verified_by character_data,
comments character_data
) WITHOUT OIDS;
......@@ -1581,12 +1589,12 @@ GRANT SELECT ON sql_features TO PUBLIC;
/*
* 5.52
* 5.53
* SQL_IMPLEMENTATION_INFO table
*/
-- Note: Implementation information items are defined in ISO/IEC 9075-3:2003,
-- clause 7.1.
-- Note: Implementation information items are defined in ISO/IEC 9075-3:2008,
-- clause 9.1.
CREATE TABLE sql_implementation_info (
implementation_info_id character_data,
......@@ -1613,8 +1621,8 @@ GRANT SELECT ON sql_implementation_info TO PUBLIC;
/*
* 5.53
* SQL_LANGUAGES table
* apparently removed in SQL:2008
*/
CREATE TABLE sql_languages (
......@@ -1643,7 +1651,7 @@ GRANT SELECT ON sql_languages TO PUBLIC;
CREATE TABLE sql_packages (
feature_id character_data,
feature_name character_data,
is_supported character_data,
is_supported yes_or_no,
is_verified_by character_data,
comments character_data
) WITHOUT OIDS;
......@@ -1670,7 +1678,7 @@ GRANT SELECT ON sql_packages TO PUBLIC;
CREATE TABLE sql_parts (
feature_id character_data,
feature_name character_data,
is_supported character_data,
is_supported yes_or_no,
is_verified_by character_data,
comments character_data
) WITHOUT OIDS;
......@@ -1691,7 +1699,7 @@ INSERT INTO sql_parts VALUES ('14', 'XML-Related Specifications (SQL/XML)', 'YES
* SQL_SIZING table
*/
-- Note: Sizing items are defined in ISO/IEC 9075-3:2003, clause 7.2.
-- Note: Sizing items are defined in ISO/IEC 9075-3:2008, clause 9.2.
CREATE TABLE sql_sizing (
sizing_id cardinal_number,
......@@ -1770,9 +1778,9 @@ CREATE VIEW table_constraints AS
WHEN 'p' THEN 'PRIMARY KEY'
WHEN 'u' THEN 'UNIQUE' END
AS character_data) AS constraint_type,
CAST(CASE WHEN c.condeferrable THEN 'YES' ELSE 'NO' END AS character_data)
CAST(CASE WHEN c.condeferrable THEN 'YES' ELSE 'NO' END AS yes_or_no)
AS is_deferrable,
CAST(CASE WHEN c.condeferred THEN 'YES' ELSE 'NO' END AS character_data)
CAST(CASE WHEN c.condeferred THEN 'YES' ELSE 'NO' END AS yes_or_no)
AS initially_deferred
FROM pg_namespace nc,
......@@ -1800,8 +1808,8 @@ CREATE VIEW table_constraints AS
CAST(nr.nspname AS sql_identifier) AS table_schema,
CAST(r.relname AS sql_identifier) AS table_name,
CAST('CHECK' AS character_data) AS constraint_type,
CAST('NO' AS character_data) AS is_deferrable,
CAST('NO' AS character_data) AS initially_deferred
CAST('NO' AS yes_or_no) AS is_deferrable,
CAST('NO' AS yes_or_no) AS initially_deferred
FROM pg_namespace nr,
pg_class r,
......@@ -1848,8 +1856,8 @@ CREATE VIEW table_privileges AS
pg_has_role(grantee.oid, c.relowner, 'USAGE')
OR aclcontains(c.relacl,
makeaclitem(grantee.oid, u_grantor.oid, pr.type, true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable,
CAST('NO' AS character_data) AS with_hierarchy
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable,
CAST('NO' AS yes_or_no) AS with_hierarchy
FROM pg_class c,
pg_namespace nc,
......@@ -1905,9 +1913,9 @@ CREATE VIEW tables AS
CAST(CASE WHEN c.relkind = 'r'
OR (c.relkind = 'v'
AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '3' AND is_instead))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_insertable_into,
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_insertable_into,
CAST('NO' AS character_data) AS is_typed,
CAST('NO' AS yes_or_no) AS is_typed,
CAST(
CASE WHEN nc.oid = pg_my_temp_schema() THEN 'PRESERVE' -- FIXME
ELSE null END
......@@ -2067,7 +2075,7 @@ CREATE VIEW usage_privileges AS
CAST(t.typname AS sql_identifier) AS object_name,
CAST('DOMAIN' AS character_data) AS object_type,
CAST('USAGE' AS character_data) AS privilege_type,
CAST('NO' AS character_data) AS is_grantable
CAST('NO' AS yes_or_no) AS is_grantable
FROM pg_authid u,
pg_namespace n,
......@@ -2093,7 +2101,7 @@ CREATE VIEW usage_privileges AS
pg_has_role(grantee.oid, fdw.fdwowner, 'USAGE')
OR aclcontains(fdw.fdwacl,
makeaclitem(grantee.oid, u_grantor.oid, 'USAGE', true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_foreign_data_wrapper fdw,
pg_authid u_grantor,
......@@ -2125,7 +2133,7 @@ CREATE VIEW usage_privileges AS
pg_has_role(grantee.oid, srv.srvowner, 'USAGE')
OR aclcontains(srv.srvacl,
makeaclitem(grantee.oid, u_grantor.oid, 'USAGE', true))
THEN 'YES' ELSE 'NO' END AS character_data) AS is_grantable
THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable
FROM pg_foreign_server srv,
pg_authid u_grantor,
......@@ -2281,12 +2289,16 @@ CREATE VIEW views AS
CASE WHEN EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '2' AND is_instead)
AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '4' AND is_instead)
THEN 'YES' ELSE 'NO' END
AS character_data) AS is_updatable,
AS yes_or_no) AS is_updatable,
CAST(
CASE WHEN EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c.oid AND ev_type = '3' AND is_instead)
THEN 'YES' ELSE 'NO' END
AS character_data) AS is_insertable_into
AS yes_or_no) AS is_insertable_into,
CAST('NO' AS yes_or_no) AS is_trigger_updatable,
CAST('NO' AS yes_or_no) AS is_trigger_deletable,
CAST('NO' AS yes_or_no) AS is_trigger_insertable_into
FROM pg_namespace nc, pg_class c
......@@ -2303,7 +2315,7 @@ GRANT SELECT ON views TO PUBLIC;
-- The following views have dependencies that force them to appear out of order.
/*
* 5.23
* 5.24
* DATA_TYPE_PRIVILEGES view
*/
......@@ -2331,7 +2343,7 @@ GRANT SELECT ON data_type_privileges TO PUBLIC;
/*
* 5.28
* 5.29
* ELEMENT_TYPES view
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment