summaryrefslogtreecommitdiffstats
path: root/doc/src/sgml/information_schema.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/information_schema.sgml')
-rw-r--r--doc/src/sgml/information_schema.sgml8682
1 files changed, 8682 insertions, 0 deletions
diff --git a/doc/src/sgml/information_schema.sgml b/doc/src/sgml/information_schema.sgml
new file mode 100644
index 0000000..8f1c649
--- /dev/null
+++ b/doc/src/sgml/information_schema.sgml
@@ -0,0 +1,8682 @@
+<!-- doc/src/sgml/information_schema.sgml -->
+
+<chapter id="information-schema">
+ <title>The Information Schema</title>
+
+ <indexterm zone="information-schema">
+ <primary>information schema</primary>
+ </indexterm>
+
+ <para>
+ The information schema consists of a set of views that contain
+ information about the objects defined in the current database. The
+ information schema is defined in the SQL standard and can therefore
+ be expected to be portable and remain stable &mdash; unlike the system
+ catalogs, which are specific to
+ <productname>PostgreSQL</productname> and are modeled after
+ implementation concerns. The information schema views do not,
+ however, contain information about
+ <productname>PostgreSQL</productname>-specific features; to inquire
+ about those you need to query the system catalogs or other
+ <productname>PostgreSQL</productname>-specific views.
+ </para>
+
+ <note>
+ <para>
+ When querying the database for constraint information, it is possible
+ for a standard-compliant query that expects to return one row to
+ return several. This is because the SQL standard requires constraint
+ names to be unique within a schema, but
+ <productname>PostgreSQL</productname> does not enforce this
+ restriction. <productname>PostgreSQL</productname>
+ automatically-generated constraint names avoid duplicates in the
+ same schema, but users can specify such duplicate names.
+ </para>
+
+ <para>
+ This problem can appear when querying information schema views such
+ as <literal>check_constraint_routine_usage</literal>,
+ <literal>check_constraints</literal>, <literal>domain_constraints</literal>, and
+ <literal>referential_constraints</literal>. Some other views have similar
+ issues but contain the table name to help distinguish duplicate
+ rows, e.g., <literal>constraint_column_usage</literal>,
+ <literal>constraint_table_usage</literal>, <literal>table_constraints</literal>.
+ </para>
+ </note>
+
+
+ <sect1 id="infoschema-schema">
+ <title>The Schema</title>
+
+ <para>
+ The information schema itself is a schema named
+ <literal>information_schema</literal>. This schema automatically
+ exists in all databases. The owner of this schema is the initial
+ database user in the cluster, and that user naturally has all the
+ privileges on this schema, including the ability to drop it (but
+ the space savings achieved by that are minuscule).
+ </para>
+
+ <para>
+ By default, the information schema is not in the schema search
+ path, so you need to access all objects in it through qualified
+ names. Since the names of some of the objects in the information
+ schema are generic names that might occur in user applications, you
+ should be careful if you want to put the information schema in the
+ path.
+ </para>
+ </sect1>
+
+ <sect1 id="infoschema-datatypes">
+ <title>Data Types</title>
+
+ <para>
+ The columns of the information schema views use special data types
+ that are defined in the information schema. These are defined as
+ simple domains over ordinary built-in types. You should not use
+ these types for work outside the information schema, but your
+ applications must be prepared for them if they select from the
+ information schema.
+ </para>
+
+ <para>
+ These types are:
+
+ <variablelist>
+ <varlistentry>
+ <term><type>cardinal_number</type></term>
+ <listitem>
+ <para>
+ A nonnegative integer.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><type>character_data</type></term>
+ <listitem>
+ <para>
+ A character string (without specific maximum length).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><type>sql_identifier</type></term>
+ <listitem>
+ <para>
+ A character string. This type is used for SQL identifiers, the
+ type <type>character_data</type> is used for any other kind of
+ text data.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><type>time_stamp</type></term>
+ <listitem>
+ <para>
+ A domain over the type <type>timestamp with time zone</type>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <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>
+
+ Every column in the information schema has one of these five types.
+ </para>
+ </sect1>
+
+ <sect1 id="infoschema-information-schema-catalog-name">
+ <title><literal>information_schema_catalog_name</literal></title>
+
+ <para>
+ <literal>information_schema_catalog_name</literal> is a table that
+ always contains one row and one column containing the name of the
+ current database (current catalog, in SQL terminology).
+ </para>
+
+ <table>
+ <title><structname>information_schema_catalog_name</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>catalog_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains this information schema
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-administrable-role-authorizations">
+ <title><literal>administrable_role_&zwsp;authorizations</literal></title>
+
+ <para>
+ The view <literal>administrable_role_authorizations</literal>
+ identifies all roles that the current user has the admin option
+ for.
+ </para>
+
+ <table>
+ <title><structname>administrable_role_authorizations</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role to which this role membership was granted (can
+ be the current user, or a different role in case of nested role
+ memberships)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>role_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of a role
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Always <literal>YES</literal>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-applicable-roles">
+ <title><literal>applicable_roles</literal></title>
+
+ <para>
+ The view <literal>applicable_roles</literal> identifies all roles
+ whose privileges the current user can use. This means there is
+ some chain of role grants from the current user to the role in
+ question. The current user itself is also an applicable role. The
+ set of applicable roles is generally used for permission checking.
+ <indexterm><primary>applicable role</primary></indexterm>
+ <indexterm><primary>role</primary><secondary>applicable</secondary></indexterm>
+ </para>
+
+ <table>
+ <title><structname>applicable_roles</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role to which this role membership was granted (can
+ be the current user, or a different role in case of nested role
+ memberships)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>role_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of a role
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the grantee has the admin option on
+ the role, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-attributes">
+ <title><literal>attributes</literal></title>
+
+ <para>
+ The view <literal>attributes</literal> contains information about
+ the attributes of composite data types defined in the database.
+ (Note that the view does not give information about table columns,
+ which are sometimes called attributes in PostgreSQL contexts.)
+ Only those attributes are shown that the current user has access to (by way
+ of being the owner of or having some privilege on the type).
+ </para>
+
+ <table>
+ <title><structname>attributes</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the data type (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the data type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the data type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>attribute_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the attribute
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordinal_position</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Ordinal position of the attribute within the data type (count starts at 1)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>attribute_default</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Default expression of the attribute
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_nullable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the attribute is possibly nullable,
+ <literal>NO</literal> if it is known not nullable.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Data type of the attribute, if it is a built-in type, or
+ <literal>ARRAY</literal> if it is some array (in that case, see
+ the view <literal>element_types</literal>), else
+ <literal>USER-DEFINED</literal> (in that case, the type is
+ identified in <literal>attribute_udt_name</literal> and
+ associated columns).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a character or bit
+ string type, the declared maximum length; null for all other
+ data types or if no maximum length was declared.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a character type,
+ the maximum possible length in octets (bytes) of a datum; null
+ for all other data types. The maximum octet length depends on
+ the declared character maximum length (see above) and the
+ server encoding.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the collation of the attribute
+ (always the current database), null if default or the data type
+ of the attribute is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the collation of the attribute,
+ null if default or the data type of the attribute is not
+ collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the collation of the attribute, null if default or the
+ data type of the attribute is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a numeric type, this
+ column contains the (declared or implicit) precision of the
+ type for this attribute. The precision indicates the number of
+ significant digits. It can be expressed in decimal (base 10)
+ or binary (base 2) terms, as specified in the column
+ <literal>numeric_precision_radix</literal>. For all other data
+ types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a numeric type, this
+ column indicates in which base the values in the columns
+ <literal>numeric_precision</literal> and
+ <literal>numeric_scale</literal> are expressed. The value is
+ either 2 or 10. For all other data types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies an exact numeric
+ type, this column contains the (declared or implicit) scale of
+ the type for this attribute. The scale indicates the number of
+ significant digits to the right of the decimal point. It can
+ be expressed in decimal (base 10) or binary (base 2) terms, as
+ specified in the column
+ <literal>numeric_precision_radix</literal>. For all other data
+ types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a date, time,
+ timestamp, or interval type, this column contains the (declared
+ or implicit) fractional seconds precision of the type for this
+ attribute, that is, the number of decimal digits maintained
+ following the decimal point in the seconds value. For all
+ other data types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies an interval type,
+ this column contains the specification which fields the
+ intervals include for this attribute, e.g., <literal>YEAR TO
+ MONTH</literal>, <literal>DAY TO SECOND</literal>, etc. If no
+ field restrictions were specified (that is, the interval
+ accepts all fields), and for all other data types, this field
+ is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available
+ in <productname>PostgreSQL</productname>
+ (see <literal>datetime_precision</literal> for the fractional
+ seconds precision of interval type attributes)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>attribute_udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the attribute data type is defined in
+ (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>attribute_udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the attribute data type is defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>attribute_udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the attribute data type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, because arrays always have unlimited maximum cardinality in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ An identifier of the data type descriptor of the column, unique
+ among the data type descriptors pertaining to the table. This
+ is mainly useful for joining with other instances of such
+ identifiers. (The specific format of the identifier is not
+ defined and not guaranteed to remain the same in future
+ versions.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_derived_reference_attribute</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ See also under <xref linkend="infoschema-columns"/>, a similarly
+ structured view, for further information on some of the columns.
+ </para>
+ </sect1>
+
+ <sect1 id="infoschema-character-sets">
+ <title><literal>character_sets</literal></title>
+
+ <para>
+ The view <literal>character_sets</literal> identifies the character
+ sets available in the current database. Since PostgreSQL does not
+ support multiple character sets within one database, this view only
+ shows one, which is the database encoding.
+ </para>
+
+ <para>
+ Take note of how the following terms are used in the SQL standard:
+ <variablelist>
+ <varlistentry>
+ <term>character repertoire</term>
+ <listitem>
+ <para>
+ An abstract collection of characters, for
+ example <literal>UNICODE</literal>, <literal>UCS</literal>, or
+ <literal>LATIN1</literal>. Not exposed as an SQL object, but
+ visible in this view.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>character encoding form</term>
+ <listitem>
+ <para>
+ An encoding of some character repertoire. Most older character
+ repertoires only use one encoding form, and so there are no
+ separate names for them (e.g., <literal>LATIN2</literal> is an
+ encoding form applicable to the <literal>LATIN2</literal>
+ repertoire). But for example Unicode has the encoding forms
+ <literal>UTF8</literal>, <literal>UTF16</literal>, etc. (not
+ all supported by PostgreSQL). Encoding forms are not exposed
+ as an SQL object, but are visible in this view.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>character set</term>
+ <listitem>
+ <para>
+ A named SQL object that identifies a character repertoire, a
+ character encoding, and a default collation. A predefined
+ character set would typically have the same name as an encoding
+ form, but users could define other names. For example, the
+ character set <literal>UTF8</literal> would typically identify
+ the character repertoire <literal>UCS</literal>, encoding
+ form <literal>UTF8</literal>, and some default collation.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ You can think of an <quote>encoding</quote> in PostgreSQL either as
+ a character set or a character encoding form. They will have the
+ same name, and there can only be one in one database.
+ </para>
+
+ <table>
+ <title><structname>character_sets</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Character sets are currently not implemented as schema objects, so this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Character sets are currently not implemented as schema objects, so this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the character set, currently implemented as showing the name of the database encoding
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_repertoire</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Character repertoire, showing <literal>UCS</literal> if the encoding is <literal>UTF8</literal>, else just the encoding name
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>form_of_use</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Character encoding form, same as the database encoding
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>default_collate_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the default collation (always the current database, if any collation is identified)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>default_collate_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the default collation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>default_collate_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the default collation. The default collation is
+ identified as the collation that matches
+ the <literal>COLLATE</literal> and <literal>CTYPE</literal>
+ settings of the current database. If there is no such
+ collation, then this column and the associated schema and
+ catalog columns are null.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-check-constraint-routine-usage">
+ <title><literal>check_constraint_routine_usage</literal></title>
+
+ <para>
+ The view <literal>check_constraint_routine_usage</literal>
+ identifies routines (functions and procedures) that are used by a
+ check constraint. Only those routines are shown that are owned by
+ a currently enabled role.
+ </para>
+
+ <table>
+ <title><structname>check_constraint_routine_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-check-constraints">
+ <title><literal>check_constraints</literal></title>
+
+ <para>
+ The view <literal>check_constraints</literal> contains all check
+ constraints, either defined on a table or on a domain, that are
+ owned by a currently enabled role. (The owner of the table or
+ domain is the owner of the constraint.)
+ </para>
+
+ <table>
+ <title><structname>check_constraints</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>check_clause</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The check expression of the check constraint
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-collations">
+ <title><literal>collations</literal></title>
+
+ <para>
+ The view <literal>collations</literal> contains the collations
+ available in the current database.
+ </para>
+
+ <table>
+ <title><structname>collations</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the collation (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the collation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the default collation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>pad_attribute</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>NO PAD</literal> (The alternative <literal>PAD
+ SPACE</literal> is not supported by PostgreSQL.)
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-collation-character-set-applicab"> <!-- max 44 characters -->
+ <title><literal>collation_character_set_&zwsp;applicability</literal></title>
+
+ <para>
+ The view <literal>collation_character_set_applicability</literal>
+ identifies which character set the available collations are
+ applicable to. In PostgreSQL, there is only one character set per
+ database (see explanation
+ in <xref linkend="infoschema-character-sets"/>), so this view does
+ not provide much useful information.
+ </para>
+
+ <table>
+ <title><structname>collation_character_set_applicability</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the collation (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the collation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the default collation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Character sets are currently not implemented as schema objects, so this column is null
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Character sets are currently not implemented as schema objects, so this column is null
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the character set
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-column-column-usage">
+ <title><literal>column_column_usage</literal></title>
+
+ <para>
+ The view <literal>column_column_usage</literal> identifies all generated
+ columns that depend on another base column in the same table. Only tables
+ owned by a currently enabled role are included.
+ </para>
+
+ <table>
+ <title><structname>column_column_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the base column that a generated column depends on
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dependent_column</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the generated column
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-column-domain-usage">
+ <title><literal>column_domain_usage</literal></title>
+
+ <para>
+ The view <literal>column_domain_usage</literal> identifies all
+ columns (of a table or a view) that make use of some domain defined
+ in the current database and owned by a currently enabled role.
+ </para>
+
+ <table>
+ <title><structname>column_domain_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the domain (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-column-options">
+ <title><literal>column_options</literal></title>
+
+ <para>
+ The view <literal>column_options</literal> contains all the
+ options defined for foreign table columns in the current database. Only
+ those foreign table columns are shown that the current user has access to
+ (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>column_options</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the foreign table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the foreign table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of an option
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Value of the option
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-column-privileges">
+ <title><literal>column_privileges</literal></title>
+
+ <para>
+ The view <literal>column_privileges</literal> identifies all
+ privileges granted on columns to a currently enabled role or by a
+ currently enabled role. There is one row for each combination of
+ column, grantor, and grantee.
+ </para>
+
+ <para>
+ If a privilege has been granted on an entire table, it will show up in
+ this view as a grant for each column, but only for the
+ privilege types where column granularity is possible:
+ <literal>SELECT</literal>, <literal>INSERT</literal>,
+ <literal>UPDATE</literal>, <literal>REFERENCES</literal>.
+ </para>
+
+ <table>
+ <title><structname>column_privileges</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that contains the column (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that contains the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that contains the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Type of the privilege: <literal>SELECT</literal>,
+ <literal>INSERT</literal>, <literal>UPDATE</literal>, or
+ <literal>REFERENCES</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-column-udt-usage">
+ <title><literal>column_udt_usage</literal></title>
+
+ <para>
+ The view <literal>column_udt_usage</literal> identifies all columns
+ that use data types owned by a currently enabled role. Note that in
+ <productname>PostgreSQL</productname>, built-in data types behave
+ like user-defined types, so they are included here as well. See
+ also <xref linkend="infoschema-columns"/> for details.
+ </para>
+
+ <table>
+ <title><structname>column_udt_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the column data type (the underlying
+ type of the domain, if applicable) is defined in (always the
+ current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the column data type (the underlying
+ type of the domain, if applicable) is defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column data type (the underlying type of the
+ domain, if applicable)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-columns">
+ <title><literal>columns</literal></title>
+
+ <para>
+ The view <literal>columns</literal> contains information about all
+ table columns (or view columns) in the database. System columns
+ (<literal>ctid</literal>, etc.) are not included. Only those columns are
+ shown that the current user has access to (by way of being the
+ owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>columns</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordinal_position</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Ordinal position of the column within the table (count starts at 1)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_default</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Default expression of the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_nullable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the column is possibly nullable,
+ <literal>NO</literal> if it is known not nullable. A not-null
+ constraint is one way a column can be known not nullable, but
+ there can be others.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Data type of the column, if it is a built-in type, or
+ <literal>ARRAY</literal> if it is some array (in that case, see
+ the view <literal>element_types</literal>), else
+ <literal>USER-DEFINED</literal> (in that case, the type is
+ identified in <literal>udt_name</literal> and associated
+ columns). If the column is based on a domain, this column
+ refers to the type underlying the domain (and the domain is
+ identified in <literal>domain_name</literal> and associated
+ columns).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a character or bit
+ string type, the declared maximum length; null for all other
+ data types or if no maximum length was declared.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a character type,
+ the maximum possible length in octets (bytes) of a datum; null
+ for all other data types. The maximum octet length depends on
+ the declared character maximum length (see above) and the
+ server encoding.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a numeric type, this
+ column contains the (declared or implicit) precision of the
+ type for this column. The precision indicates the number of
+ significant digits. It can be expressed in decimal (base 10)
+ or binary (base 2) terms, as specified in the column
+ <literal>numeric_precision_radix</literal>. For all other data
+ types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a numeric type, this
+ column indicates in which base the values in the columns
+ <literal>numeric_precision</literal> and
+ <literal>numeric_scale</literal> are expressed. The value is
+ either 2 or 10. For all other data types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies an exact numeric
+ type, this column contains the (declared or implicit) scale of
+ the type for this column. The scale indicates the number of
+ significant digits to the right of the decimal point. It can
+ be expressed in decimal (base 10) or binary (base 2) terms, as
+ specified in the column
+ <literal>numeric_precision_radix</literal>. For all other data
+ types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a date, time,
+ timestamp, or interval type, this column contains the (declared
+ or implicit) fractional seconds precision of the type for this
+ column, that is, the number of decimal digits maintained
+ following the decimal point in the seconds value. For all
+ other data types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies an interval type,
+ this column contains the specification which fields the
+ intervals include for this column, e.g., <literal>YEAR TO
+ MONTH</literal>, <literal>DAY TO SECOND</literal>, etc. If no
+ field restrictions were specified (that is, the interval
+ accepts all fields), and for all other data types, this field
+ is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available
+ in <productname>PostgreSQL</productname>
+ (see <literal>datetime_precision</literal> for the fractional
+ seconds precision of interval type columns)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the collation of the column
+ (always the current database), null if default or the data type
+ of the column is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the collation of the column, null
+ if default or the data type of the column is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the collation of the column, null if default or the
+ data type of the column is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ If the column has a domain type, the name of the database that
+ the domain is defined in (always the current database), else
+ null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ If the column has a domain type, the name of the schema that
+ the domain is defined in, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ If the column has a domain type, the name of the domain, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the column data type (the underlying
+ type of the domain, if applicable) is defined in (always the
+ current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the column data type (the underlying
+ type of the domain, if applicable) is defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column data type (the underlying type of the
+ domain, if applicable)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, because arrays always have unlimited maximum cardinality in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ An identifier of the data type descriptor of the column, unique
+ among the data type descriptors pertaining to the table. This
+ is mainly useful for joining with other instances of such
+ identifiers. (The specific format of the identifier is not
+ defined and not guaranteed to remain the same in future
+ versions.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_self_referencing</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_identity</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ If the column is an identity column, then <literal>YES</literal>,
+ else <literal>NO</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>identity_generation</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is an identity column, then <literal>ALWAYS</literal>
+ or <literal>BY DEFAULT</literal>, reflecting the definition of the
+ column.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>identity_start</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is an identity column, then the start value of the
+ internal sequence, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>identity_increment</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is an identity column, then the increment of the internal
+ sequence, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>identity_maximum</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is an identity column, then the maximum value of the
+ internal sequence, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>identity_minimum</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is an identity column, then the minimum value of the
+ internal sequence, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>identity_cycle</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ If the column is an identity column, then <literal>YES</literal> if the
+ internal sequence cycles or <literal>NO</literal> if it does not;
+ otherwise null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_generated</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is a generated column, then <literal>ALWAYS</literal>,
+ else <literal>NEVER</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>generation_expression</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the column is a generated column, then the generation expression,
+ else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_updatable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the column is updatable,
+ <literal>NO</literal> if not (Columns in base tables are always
+ updatable, columns in views not necessarily)
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ Since data types can be defined in a variety of ways in SQL, and
+ <productname>PostgreSQL</productname> contains additional ways to
+ define data types, their representation in the information schema
+ can be somewhat difficult. The column <literal>data_type</literal>
+ is supposed to identify the underlying built-in type of the column.
+ In <productname>PostgreSQL</productname>, this means that the type
+ is defined in the system catalog schema
+ <literal>pg_catalog</literal>. This column might be useful if the
+ application can handle the well-known built-in types specially (for
+ example, format the numeric types differently or use the data in
+ the precision columns). The columns <literal>udt_name</literal>,
+ <literal>udt_schema</literal>, and <literal>udt_catalog</literal>
+ always identify the underlying data type of the column, even if the
+ column is based on a domain. (Since
+ <productname>PostgreSQL</productname> treats built-in types like
+ user-defined types, built-in types appear here as well. This is an
+ extension of the SQL standard.) These columns should be used if an
+ application wants to process data differently according to the
+ type, because in that case it wouldn't matter if the column is
+ really based on a domain. If the column is based on a domain, the
+ identity of the domain is stored in the columns
+ <literal>domain_name</literal>, <literal>domain_schema</literal>,
+ and <literal>domain_catalog</literal>. If you want to pair up
+ columns with their associated data types and treat domains as
+ separate types, you could write <literal>coalesce(domain_name,
+ udt_name)</literal>, etc.
+ </para>
+ </sect1>
+
+ <sect1 id="infoschema-constraint-column-usage">
+ <title><literal>constraint_column_usage</literal></title>
+
+ <para>
+ The view <literal>constraint_column_usage</literal> identifies all
+ columns in the current database that are used by some constraint.
+ Only those columns are shown that are contained in a table owned by
+ a currently enabled role. For a check constraint, this view
+ identifies the columns that are used in the check expression. For
+ a foreign key constraint, this view identifies the columns that the
+ foreign key references. For a unique or primary key constraint,
+ this view identifies the constrained columns.
+ </para>
+
+ <table>
+ <title><structname>constraint_column_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that contains the
+ column that is used by some constraint (always the current
+ database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that contains the
+ column that is used by some constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that contains the column that is used by some
+ constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column that is used by some constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-constraint-table-usage">
+ <title><literal>constraint_table_usage</literal></title>
+
+ <para>
+ The view <literal>constraint_table_usage</literal> identifies all
+ tables in the current database that are used by some constraint and
+ are owned by a currently enabled role. (This is different from the
+ view <literal>table_constraints</literal>, which identifies all
+ table constraints along with the table they are defined on.) For a
+ foreign key constraint, this view identifies the table that the
+ foreign key references. For a unique or primary key constraint,
+ this view simply identifies the table the constraint belongs to.
+ Check constraints and not-null constraints are not included in this
+ view.
+ </para>
+
+ <table>
+ <title><structname>constraint_table_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that is used by
+ some constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that is used by some
+ constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that is used by some constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-data-type-privileges">
+ <title><literal>data_type_privileges</literal></title>
+
+ <para>
+ The view <literal>data_type_privileges</literal> identifies all
+ data type descriptors that the current user has access to, by way
+ of being the owner of the described object or having some privilege
+ for it. A data type descriptor is generated whenever a data type
+ is used in the definition of a table column, a domain, or a
+ function (as parameter or return type) and stores some information
+ about how the data type is used in that instance (for example, the
+ declared maximum length, if applicable). Each data type
+ descriptor is assigned an arbitrary identifier that is unique
+ among the data type descriptor identifiers assigned for one object
+ (table, domain, function). This view is probably not useful for
+ applications, but it is used to define some other views in the
+ information schema.
+ </para>
+
+ <table>
+ <title><structname>data_type_privileges</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the described object (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the described object
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the described object
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The type of the described object: one of
+ <literal>TABLE</literal> (the data type descriptor pertains to
+ a column of that table), <literal>DOMAIN</literal> (the data
+ type descriptors pertains to that domain),
+ <literal>ROUTINE</literal> (the data type descriptor pertains
+ to a parameter or the return data type of that function).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The identifier of the data type descriptor, which is unique
+ among the data type descriptors for that same object.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-domain-constraints">
+ <title><literal>domain_constraints</literal></title>
+
+ <para>
+ The view <literal>domain_constraints</literal> contains all constraints
+ belonging to domains defined in the current database. Only those domains
+ are shown that the current user has access to (by way of being the owner or
+ having some privilege).
+ </para>
+
+ <table>
+ <title><structname>domain_constraints</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the domain (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_deferrable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the constraint is deferrable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>initially_deferred</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the constraint is deferrable and initially deferred, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-domain-udt-usage">
+ <title><literal>domain_udt_usage</literal></title>
+
+ <para>
+ The view <literal>domain_udt_usage</literal> identifies all domains
+ that are based on data types owned by a currently enabled role.
+ Note that in <productname>PostgreSQL</productname>, built-in data
+ types behave like user-defined types, so they are included here as
+ well.
+ </para>
+
+ <table>
+ <title><structname>domain_udt_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the domain data type is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the domain data type is defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the domain data type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the domain (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the domain
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-domains">
+ <title><literal>domains</literal></title>
+
+ <para>
+ The view <literal>domains</literal> contains all
+ <glossterm linkend="glossary-domain">domains</glossterm> defined in the
+ current database. Only those domains are shown that the current user has
+ access to (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>domains</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the domain (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Data type of the domain, if it is a built-in type, or
+ <literal>ARRAY</literal> if it is some array (in that case, see
+ the view <literal>element_types</literal>), else
+ <literal>USER-DEFINED</literal> (in that case, the type is
+ identified in <literal>udt_name</literal> and associated
+ columns).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If the domain has a character or bit string type, the declared
+ maximum length; null for all other data types or if no maximum
+ length was declared.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If the domain has a character type, the maximum possible length
+ in octets (bytes) of a datum; null for all other data types.
+ The maximum octet length depends on the declared character
+ maximum length (see above) and the server encoding.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the collation of the domain
+ (always the current database), null if default or the data type
+ of the domain is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the collation of the domain, null
+ if default or the data type of the domain is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the collation of the domain, null if default or the
+ data type of the domain is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If the domain has a numeric type, this column contains the
+ (declared or implicit) precision of the type for this domain.
+ The precision indicates the number of significant digits. It
+ can be expressed in decimal (base 10) or binary (base 2) terms,
+ as specified in the column
+ <literal>numeric_precision_radix</literal>. For all other data
+ types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If the domain has a numeric type, this column indicates in
+ which base the values in the columns
+ <literal>numeric_precision</literal> and
+ <literal>numeric_scale</literal> are expressed. The value is
+ either 2 or 10. For all other data types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If the domain has an exact numeric type, this column contains
+ the (declared or implicit) scale of the type for this domain.
+ The scale indicates the number of significant digits to the
+ right of the decimal point. It can be expressed in decimal
+ (base 10) or binary (base 2) terms, as specified in the column
+ <literal>numeric_precision_radix</literal>. For all other data
+ types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies a date, time,
+ timestamp, or interval type, this column contains the (declared
+ or implicit) fractional seconds precision of the type for this
+ domain, that is, the number of decimal digits maintained
+ following the decimal point in the seconds value. For all
+ other data types, this column is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If <literal>data_type</literal> identifies an interval type,
+ this column contains the specification which fields the
+ intervals include for this domain, e.g., <literal>YEAR TO
+ MONTH</literal>, <literal>DAY TO SECOND</literal>, etc. If no
+ field restrictions were specified (that is, the interval
+ accepts all fields), and for all other data types, this field
+ is null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available
+ in <productname>PostgreSQL</productname>
+ (see <literal>datetime_precision</literal> for the fractional
+ seconds precision of interval type domains)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_default</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Default expression of the domain
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the domain data type is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the domain data type is defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the domain data type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, because arrays always have unlimited maximum cardinality in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ An identifier of the data type descriptor of the domain, unique
+ among the data type descriptors pertaining to the domain (which
+ is trivial, because a domain only contains one data type
+ descriptor). This is mainly useful for joining with other
+ instances of such identifiers. (The specific format of the
+ identifier is not defined and not guaranteed to remain the same
+ in future versions.)
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-element-types">
+ <title><literal>element_types</literal></title>
+
+ <para>
+ The view <literal>element_types</literal> contains the data type
+ 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
+ <literal>data_type</literal>. To obtain information on the element
+ type of the array, you can join the respective view with this view.
+ For example, to show the columns of a table with data types and
+ array element types, if applicable, you could do:
+<programlisting>
+SELECT c.column_name, c.data_type, e.data_type AS element_type
+FROM information_schema.columns c LEFT JOIN information_schema.element_types e
+ ON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier)
+ = (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier))
+WHERE c.table_schema = '...' AND c.table_name = '...'
+ORDER BY c.ordinal_position;
+</programlisting>
+ This view only includes objects that the current user has access
+ to, by way of being the owner or having some privilege.
+ </para>
+
+ <table>
+ <title><structname>element_types</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the object that uses the
+ array being described (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the object that uses the array
+ being described
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the object that uses the array being described
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ 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>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).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collection_type_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The identifier of the data type descriptor of the array being
+ described. Use this to join with the
+ <literal>dtd_identifier</literal> columns of other information
+ schema views.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Data type of the array elements, if it is a built-in type, else
+ <literal>USER-DEFINED</literal> (in that case, the type is
+ identified in <literal>udt_name</literal> and associated
+ columns).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the collation of the element
+ type (always the current database), null if default or the data
+ type of the element is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the collation of the element
+ type, null if default or the data type of the element is not
+ collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the collation of the element type, null if default or
+ the data type of the element is not collatable
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to array element data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>domain_default</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Not yet implemented
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the data type of the elements is
+ defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the data type of the elements is
+ defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the data type of the elements
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, because arrays always have unlimited maximum cardinality in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ An identifier of the data type descriptor of the element. This
+ is currently not useful.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-enabled-roles">
+ <title><literal>enabled_roles</literal></title>
+
+ <para>
+ The view <literal>enabled_roles</literal> identifies the currently
+ <quote>enabled roles</quote>. The enabled roles are recursively
+ defined as the current user together with all roles that have been
+ granted to the enabled roles with automatic inheritance. In other
+ words, these are all roles that the current user has direct or
+ indirect, automatically inheriting membership in.
+ <indexterm><primary>enabled role</primary></indexterm>
+ <indexterm><primary>role</primary><secondary>enabled</secondary></indexterm>
+ </para>
+
+ <para>
+ For permission checking, the set of <quote>applicable roles</quote>
+ is applied, which can be broader than the set of enabled roles. So
+ generally, it is better to use the view
+ <literal>applicable_roles</literal> instead of this one; See
+ <xref linkend="infoschema-applicable-roles"/> for details on
+ <literal>applicable_roles</literal> view.
+ </para>
+
+ <table>
+ <title><structname>enabled_roles</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>role_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of a role
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-data-wrapper-options">
+ <title><literal>foreign_data_wrapper_options</literal></title>
+
+ <para>
+ The view <literal>foreign_data_wrapper_options</literal> contains
+ all the options defined for foreign-data wrappers in the current
+ database. Only those foreign-data wrappers are shown that the
+ current user has access to (by way of being the owner or having
+ some privilege).
+ </para>
+
+ <table>
+ <title><structname>foreign_data_wrapper_options</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign-data wrapper is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign-data wrapper
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of an option
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Value of the option
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-data-wrappers">
+ <title><literal>foreign_data_wrappers</literal></title>
+
+ <para>
+ The view <literal>foreign_data_wrappers</literal> contains all
+ foreign-data wrappers defined in the current database. Only those
+ foreign-data wrappers are shown that the current user has access to
+ (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>foreign_data_wrappers</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the foreign-data
+ wrapper (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign-data wrapper
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>authorization_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the owner of the foreign server
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>library_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ File name of the library that implementing this foreign-data wrapper
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_language</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Language used to implement this foreign-data wrapper
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-server-options">
+ <title><literal>foreign_server_options</literal></title>
+
+ <para>
+ The view <literal>foreign_server_options</literal> contains all the
+ options defined for foreign servers in the current database. Only
+ those foreign servers are shown that the current user has access to
+ (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>foreign_server_options</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign server is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign server
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of an option
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Value of the option
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-servers">
+ <title><literal>foreign_servers</literal></title>
+
+ <para>
+ The view <literal>foreign_servers</literal> contains all foreign
+ servers defined in the current database. Only those foreign
+ servers are shown that the current user has access to (by way of
+ being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>foreign_servers</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign server is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign server
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the foreign-data
+ wrapper used by the foreign server (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_data_wrapper_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign-data wrapper used by the foreign server
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Foreign server type information, if specified upon creation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_version</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Foreign server version information, if specified upon creation
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>authorization_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the owner of the foreign server
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-table-options">
+ <title><literal>foreign_table_options</literal></title>
+
+ <para>
+ The view <literal>foreign_table_options</literal> contains all the
+ options defined for foreign tables in the current database. Only
+ those foreign tables are shown that the current user has access to
+ (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>foreign_table_options</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the foreign table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the foreign table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of an option
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Value of the option
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-foreign-tables">
+ <title><literal>foreign_tables</literal></title>
+
+ <para>
+ The view <literal>foreign_tables</literal> contains all foreign
+ tables defined in the current database. Only those foreign
+ tables are shown that the current user has access to (by way of
+ being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>foreign_tables</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign table is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the foreign table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign server is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign server
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-key-column-usage">
+ <title><literal>key_column_usage</literal></title>
+
+ <para>
+ The view <literal>key_column_usage</literal> identifies all columns
+ in the current database that are restricted by some unique, primary
+ key, or foreign key constraint. Check constraints are not included
+ in this view. Only those columns are shown that the current user
+ has access to, by way of being the owner or having some privilege.
+ </para>
+
+ <table>
+ <title><structname>key_column_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that contains the
+ column that is restricted by this constraint (always the
+ current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that contains the
+ column that is restricted by this constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that contains the column that is restricted
+ by this constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column that is restricted by this constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordinal_position</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Ordinal position of the column within the constraint key (count
+ starts at 1)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>position_in_unique_constraint</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ For a foreign-key constraint, ordinal position of the referenced
+ column within its unique constraint (count starts at 1);
+ otherwise null
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-parameters">
+ <title><literal>parameters</literal></title>
+
+ <para>
+ The view <literal>parameters</literal> contains information about
+ the parameters (arguments) of all functions in the current database.
+ Only those functions are shown that the current user has access to
+ (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>parameters</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordinal_position</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Ordinal position of the parameter in the argument list of the
+ function (count starts at 1)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>parameter_mode</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>IN</literal> for input parameter,
+ <literal>OUT</literal> for output parameter,
+ and <literal>INOUT</literal> for input/output parameter.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_result</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>as_locator</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>parameter_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the parameter, or null if the parameter has no name
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Data type of the parameter, if it is a built-in type, or
+ <literal>ARRAY</literal> if it is some array (in that case, see
+ the view <literal>element_types</literal>), else
+ <literal>USER-DEFINED</literal> (in that case, the type is
+ identified in <literal>udt_name</literal> and associated
+ columns).
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to parameter data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the data type of the parameter is
+ defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the data type of the parameter is
+ defined in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the data type of the parameter
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, because arrays always have unlimited maximum cardinality in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ An identifier of the data type descriptor of the parameter,
+ unique among the data type descriptors pertaining to the
+ function. This is mainly useful for joining with other
+ instances of such identifiers. (The specific format of the
+ identifier is not defined and not guaranteed to remain the same
+ in future versions.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>parameter_default</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The default expression of the parameter, or null if none or if the
+ function is not owned by a currently enabled role.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-referential-constraints">
+ <title><literal>referential_constraints</literal></title>
+
+ <para>
+ The view <literal>referential_constraints</literal> contains all
+ referential (foreign key) constraints in the current database.
+ Only those constraints are shown for which the current user has
+ write access to the referencing table (by way of being the
+ owner or having some privilege other than <literal>SELECT</literal>).
+ </para>
+
+ <table>
+ <title><structname>referential_constraints</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>unique_constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the unique or primary key
+ constraint that the foreign key constraint references (always
+ the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>unique_constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the unique or primary key
+ constraint that the foreign key constraint references
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>unique_constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the unique or primary key constraint that the foreign
+ key constraint references
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>match_option</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Match option of the foreign key constraint:
+ <literal>FULL</literal>, <literal>PARTIAL</literal>, or
+ <literal>NONE</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>update_rule</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Update rule of the foreign key constraint:
+ <literal>CASCADE</literal>, <literal>SET NULL</literal>,
+ <literal>SET DEFAULT</literal>, <literal>RESTRICT</literal>, or
+ <literal>NO ACTION</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>delete_rule</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Delete rule of the foreign key constraint:
+ <literal>CASCADE</literal>, <literal>SET NULL</literal>,
+ <literal>SET DEFAULT</literal>, <literal>RESTRICT</literal>, or
+ <literal>NO ACTION</literal>.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </sect1>
+
+ <sect1 id="infoschema-role-column-grants">
+ <title><literal>role_column_grants</literal></title>
+
+ <para>
+ The view <literal>role_column_grants</literal> identifies all
+ privileges granted on columns where the grantor or grantee is a
+ currently enabled role. Further information can be found under
+ <literal>column_privileges</literal>. The only effective
+ difference between this view
+ and <literal>column_privileges</literal> is that this view omits
+ columns that have been made accessible to the current user by way
+ of a grant to <literal>PUBLIC</literal>.
+ </para>
+
+ <table>
+ <title><structname>role_column_grants</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that contains the column (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that contains the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that contains the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Type of the privilege: <literal>SELECT</literal>,
+ <literal>INSERT</literal>, <literal>UPDATE</literal>, or
+ <literal>REFERENCES</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-role-routine-grants">
+ <title><literal>role_routine_grants</literal></title>
+
+ <para>
+ The view <literal>role_routine_grants</literal> identifies all
+ privileges granted on functions where the grantor or grantee is a
+ currently enabled role. Further information can be found under
+ <literal>routine_privileges</literal>. The only effective
+ difference between this view
+ and <literal>routine_privileges</literal> is that this view omits
+ functions that have been made accessible to the current user by way
+ of a grant to <literal>PUBLIC</literal>.
+ </para>
+
+ <table>
+ <title><structname>role_routine_grants</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the function (might be duplicated in case of overloading)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>EXECUTE</literal> (the only privilege type for functions)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-role-table-grants">
+ <title><literal>role_table_grants</literal></title>
+
+ <para>
+ The view <literal>role_table_grants</literal> identifies all
+ privileges granted on tables or views where the grantor or grantee
+ is a currently enabled role. Further information can be found
+ under <literal>table_privileges</literal>. The only effective
+ difference between this view
+ and <literal>table_privileges</literal> is that this view omits
+ tables that have been made accessible to the current user by way of
+ a grant to <literal>PUBLIC</literal>.
+ </para>
+
+ <table>
+ <title><structname>role_table_grants</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Type of the privilege: <literal>SELECT</literal>,
+ <literal>INSERT</literal>, <literal>UPDATE</literal>,
+ <literal>DELETE</literal>, <literal>TRUNCATE</literal>,
+ <literal>REFERENCES</literal>, or <literal>TRIGGER</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>with_hierarchy</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ In the SQL standard, <literal>WITH HIERARCHY OPTION</literal>
+ is a separate (sub-)privilege allowing certain operations on
+ table inheritance hierarchies. In PostgreSQL, this is included
+ in the <literal>SELECT</literal> privilege, so this column
+ shows <literal>YES</literal> if the privilege
+ is <literal>SELECT</literal>, else <literal>NO</literal>.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-role-udt-grants">
+ <title><literal>role_udt_grants</literal></title>
+
+ <para>
+ The view <literal>role_udt_grants</literal> is intended to identify
+ <literal>USAGE</literal> privileges granted on user-defined types
+ where the grantor or grantee is a currently enabled role. Further
+ information can be found under
+ <literal>udt_privileges</literal>. The only effective difference
+ between this view and <literal>udt_privileges</literal> is that
+ this view omits objects that have been made accessible to the
+ current user by way of a grant to <literal>PUBLIC</literal>. Since
+ data types do not have real privileges in PostgreSQL, but only an
+ implicit grant to <literal>PUBLIC</literal>, this view is empty.
+ </para>
+
+ <table>
+ <title><structname>role_udt_grants</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the type (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>TYPE USAGE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-role-usage-grants">
+ <title><literal>role_usage_grants</literal></title>
+
+ <para>
+ The view <literal>role_usage_grants</literal> identifies
+ <literal>USAGE</literal> privileges granted on various kinds of
+ objects where the grantor or grantee is a currently enabled role.
+ Further information can be found under
+ <literal>usage_privileges</literal>. The only effective difference
+ between this view and <literal>usage_privileges</literal> is that
+ this view omits objects that have been made accessible to the
+ current user by way of a grant to <literal>PUBLIC</literal>.
+ </para>
+
+ <table>
+ <title><structname>role_usage_grants</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the object (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the object, if applicable,
+ else an empty string
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the object
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>COLLATION</literal> or <literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal> or <literal>SEQUENCE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>USAGE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-routine-column-usage">
+ <title><literal>routine_column_usage</literal></title>
+
+ <para>
+ The view <literal>routine_column_usage</literal> identifies all columns
+ that are used by a function or procedure, either in the SQL body or in
+ parameter default expressions. (This only works for unquoted SQL bodies,
+ not quoted bodies or functions in other languages.) A column is only
+ included if its table is owned by a currently enabled role.
+ </para>
+
+ <table>
+ <title><literal>routine_column_usage</literal> Columns</title>
+
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the function (might be duplicated in case of overloading)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that is used by the
+ function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that is used by the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that is used by the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column that is used by the function
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-routine-privileges">
+ <title><literal>routine_privileges</literal></title>
+
+ <para>
+ The view <literal>routine_privileges</literal> identifies all
+ privileges granted on functions to a currently enabled role or by a
+ currently enabled role. There is one row for each combination of function,
+ grantor, and grantee.
+ </para>
+
+ <table>
+ <title><structname>routine_privileges</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the function (might be duplicated in case of overloading)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>EXECUTE</literal> (the only privilege type for functions)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-routine-routine-usage">
+ <title><literal>routine_routine_usage</literal></title>
+
+ <para>
+ The view <literal>routine_routine_usage</literal> identifies all functions
+ or procedures that are used by another (or the same) function or procedure,
+ either in the SQL body or in parameter default expressions. (This only
+ works for unquoted SQL bodies, not quoted bodies or functions in other
+ languages.) An entry is included here only if the used function is owned
+ by a currently enabled role. (There is no such restriction on the using
+ function.)
+ </para>
+
+ <para>
+ Note that the entries for both functions in the view refer to the
+ <quote>specific</quote> name of the routine, even though the column names
+ are used in a way that is inconsistent with other information schema views
+ about routines. This is per SQL standard, although it is arguably a
+ misdesign. See <xref linkend="infoschema-routines"/> for more information
+ about specific names.
+ </para>
+
+ <table>
+ <title><literal>routine_routine_usage</literal> Columns</title>
+
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the using function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the using function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the using function.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the function that is used by the
+ first function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the function that is used by the first
+ function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function that is used by the
+ first function.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-routine-sequence-usage">
+ <title><literal>routine_sequence_usage</literal></title>
+
+ <para>
+ The view <literal>routine_sequence_usage</literal> identifies all sequences
+ that are used by a function or procedure, either in the SQL body or in
+ parameter default expressions. (This only works for unquoted SQL bodies,
+ not quoted bodies or functions in other languages.) A sequence is only
+ included if that sequence is owned by a currently enabled role.
+ </para>
+
+ <table>
+ <title><literal>routine_sequence_usage</literal> Columns</title>
+
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the function (might be duplicated in case of overloading)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>schema_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the sequence that is used by the
+ function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sequence_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the sequence that is used by the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sequence_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the sequence that is used by the function
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-routine-table-usage">
+ <title><literal>routine_table_usage</literal></title>
+
+ <para>
+ The view <literal>routine_table_usage</literal> is meant to identify all
+ tables that are used by a function or procedure. This information is
+ currently not tracked by <productname>PostgreSQL</productname>.
+ </para>
+
+ <table>
+ <title><literal>routine_table_usage</literal> Columns</title>
+
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the function (might be duplicated in case of overloading)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that is used by the
+ function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that is used by the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that is used by the function
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-routines">
+ <title><literal>routines</literal></title>
+
+ <para>
+ The view <literal>routines</literal> contains all functions and procedures in the
+ current database. Only those functions and procedures are shown that the current
+ user has access to (by way of being the owner or having some
+ privilege).
+ </para>
+
+ <table>
+ <title><structname>routines</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. This is a
+ name that uniquely identifies the function in the schema, even
+ if the real name of the function is overloaded. The format of
+ the specific name is not defined, it should only be used to
+ compare it to other instances of specific routine names.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the function (might be duplicated in case of overloading)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>FUNCTION</literal> for a
+ function, <literal>PROCEDURE</literal> for a procedure
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>module_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>module_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>module_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Return data type of the function, if it is a built-in type, or
+ <literal>ARRAY</literal> if it is some array (in that case, see
+ the view <literal>element_types</literal>), else
+ <literal>USER-DEFINED</literal> (in that case, the type is
+ identified in <literal>type_udt_name</literal> and associated
+ columns). Null for a procedure.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, since this information is not applied to return data types in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>type_udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the return data type of the function
+ is defined in (always the current database). Null for a procedure.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>type_udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that the return data type of the function is
+ defined in. Null for a procedure.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>type_udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the return data type of the function. Null for a procedure.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Always null, because arrays always have unlimited maximum cardinality in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ An identifier of the data type descriptor of the return data
+ type of this function, unique among the data type descriptors
+ pertaining to the function. This is mainly useful for joining
+ with other instances of such identifiers. (The specific format
+ of the identifier is not defined and not guaranteed to remain
+ the same in future versions.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_body</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the function is an SQL function, then
+ <literal>SQL</literal>, else <literal>EXTERNAL</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>routine_definition</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The source text of the function (null if the function is not
+ owned by a currently enabled role). (According to the SQL
+ standard, this column is only applicable if
+ <literal>routine_body</literal> is <literal>SQL</literal>, but
+ in <productname>PostgreSQL</productname> it will contain
+ whatever source text was specified when the function was
+ created.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>external_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If this function is a C function, then the external name (link
+ symbol) of the function; else null. (This works out to be the
+ same value that is shown in
+ <literal>routine_definition</literal>.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>external_language</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The language the function is written in
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>parameter_style</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>GENERAL</literal> (The SQL standard defines
+ other parameter styles, which are not available in <productname>PostgreSQL</productname>.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_deterministic</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ If the function is declared immutable (called deterministic in
+ the SQL standard), then <literal>YES</literal>, else
+ <literal>NO</literal>. (You cannot query the other volatility
+ levels available in <productname>PostgreSQL</productname> through the information schema.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sql_data_access</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>MODIFIES</literal>, meaning that the function
+ possibly modifies SQL data. This information is not useful for
+ <productname>PostgreSQL</productname>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_null_call</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ If the function automatically returns null if any of its
+ arguments are null, then <literal>YES</literal>, else
+ <literal>NO</literal>. Null for a procedure.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sql_path</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>schema_level_routine</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Always <literal>YES</literal> (The opposite would be a method
+ of a user-defined type, which is a feature not available in
+ <productname>PostgreSQL</productname>.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>max_dynamic_result_sets</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_user_defined_cast</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_implicitly_invocable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>security_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ If the function runs with the privileges of the current user,
+ then <literal>INVOKER</literal>, if the function runs with the
+ privileges of the user who defined it, then
+ <literal>DEFINER</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>to_sql_specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>to_sql_specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>to_sql_specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>as_locator</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>created</structfield> <type>time_stamp</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>last_altered</structfield> <type>time_stamp</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>new_savepoint_level</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_udt_dependent</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Currently always <literal>NO</literal>. The alternative
+ <literal>YES</literal> applies to a feature not available in
+ <productname>PostgreSQL</productname>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_from_data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_as_locator</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_char_max_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_char_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_char_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_char_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_char_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_type_udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_type_udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_type_udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_scope_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_scope_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_scope_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_maximum_cardinality</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>result_cast_dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-schemata">
+ <title><literal>schemata</literal></title>
+
+ <para>
+ 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>
+ <title><structname>schemata</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>catalog_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the schema is contained in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>schema_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>schema_owner</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the owner of the schema
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>default_character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>default_character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>default_character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sql_path</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-sequences">
+ <title><literal>sequences</literal></title>
+
+ <para>
+ The view <literal>sequences</literal> contains all sequences
+ defined in the current database. Only those sequences are shown
+ that the current user has access to (by way of being the owner or
+ having some privilege).
+ </para>
+
+ <table>
+ <title><structname>sequences</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sequence_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the sequence (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sequence_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the sequence
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sequence_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the sequence
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The data type of the sequence.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ This column contains the (declared or implicit) precision of
+ the sequence data type (see above). The precision indicates
+ the number of significant digits. It can be expressed in
+ decimal (base 10) or binary (base 2) terms, as specified in the
+ column <literal>numeric_precision_radix</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ This column indicates in which base the values in the columns
+ <literal>numeric_precision</literal> and
+ <literal>numeric_scale</literal> are expressed. The value is
+ either 2 or 10.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ This column contains the (declared or implicit) scale of the
+ sequence data type (see above). The scale indicates the number
+ of significant digits to the right of the decimal point. It
+ can be expressed in decimal (base 10) or binary (base 2) terms,
+ as specified in the column
+ <literal>numeric_precision_radix</literal>.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>start_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The start value of the sequence
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>minimum_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The minimum value of the sequence
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>maximum_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The maximum value of the sequence
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>increment</structfield> <type>character_data</type>
+ </para>
+ <para>
+ The increment of the sequence
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>cycle_option</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the sequence cycles, else <literal>NO</literal>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ Note that in accordance with the SQL standard, the start, minimum,
+ maximum, and increment values are returned as character strings.
+ </para>
+ </sect1>
+
+ <sect1 id="infoschema-sql-features">
+ <title><literal>sql_features</literal></title>
+
+ <para>
+ The table <literal>sql_features</literal> contains information
+ about which formal features defined in the SQL standard are
+ supported by <productname>PostgreSQL</productname>. This is the
+ same information that is presented in <xref linkend="features"/>.
+ There you can also find some additional background information.
+ </para>
+
+ <table>
+ <title><structname>sql_features</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>feature_id</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Identifier string of the feature
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>feature_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Descriptive name of the feature
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sub_feature_id</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Identifier string of the subfeature, or a zero-length string if not a subfeature
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sub_feature_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Descriptive name of the subfeature, or a zero-length string if not a subfeature
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_supported</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the feature is fully supported by the
+ current version of <productname>PostgreSQL</productname>, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_verified_by</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always null, since the <productname>PostgreSQL</productname> development group does not
+ perform formal testing of feature conformance
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>comments</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Possibly a comment about the supported status of the feature
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-sql-implementation-info">
+ <title><literal>sql_implementation_info</literal></title>
+
+ <para>
+ The table <literal>sql_implementation_info</literal> contains
+ information about various aspects that are left
+ implementation-defined by the SQL standard. This information is
+ primarily intended for use in the context of the ODBC interface;
+ users of other interfaces will probably find this information to be
+ of little use. For this reason, the individual implementation
+ information items are not described here; you will find them in the
+ description of the ODBC interface.
+ </para>
+
+ <table>
+ <title><structname>sql_implementation_info</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>implementation_info_id</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Identifier string of the implementation information item
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>implementation_info_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Descriptive name of the implementation information item
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>integer_value</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Value of the implementation information item, or null if the
+ value is contained in the column
+ <literal>character_value</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Value of the implementation information item, or null if the
+ value is contained in the column
+ <literal>integer_value</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>comments</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Possibly a comment pertaining to the implementation information item
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-sql-parts">
+ <title><literal>sql_parts</literal></title>
+
+ <para>
+ The table <literal>sql_parts</literal> contains information about
+ which of the several parts of the SQL standard are supported by
+ <productname>PostgreSQL</productname>.
+ </para>
+
+ <table>
+ <title><structname>sql_parts</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>feature_id</structfield> <type>character_data</type>
+ </para>
+ <para>
+ An identifier string containing the number of the part
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>feature_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Descriptive name of the part
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_supported</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the part is fully supported by the
+ current version of <productname>PostgreSQL</productname>,
+ <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_verified_by</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always null, since the <productname>PostgreSQL</productname> development group does not
+ perform formal testing of feature conformance
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>comments</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Possibly a comment about the supported status of the part
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-sql-sizing">
+ <title><literal>sql_sizing</literal></title>
+
+ <para>
+ The table <literal>sql_sizing</literal> contains information about
+ various size limits and maximum values in
+ <productname>PostgreSQL</productname>. This information is
+ primarily intended for use in the context of the ODBC interface;
+ users of other interfaces will probably find this information to be
+ of little use. For this reason, the individual sizing items are
+ not described here; you will find them in the description of the
+ ODBC interface.
+ </para>
+
+ <table>
+ <title><structname>sql_sizing</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sizing_id</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Identifier of the sizing item
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>sizing_name</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Descriptive name of the sizing item
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>supported_value</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Value of the sizing item, or 0 if the size is unlimited or
+ cannot be determined, or null if the features for which the
+ sizing item is applicable are not supported
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>comments</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Possibly a comment pertaining to the sizing item
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-table-constraints">
+ <title><literal>table_constraints</literal></title>
+
+ <para>
+ The view <literal>table_constraints</literal> contains all
+ constraints belonging to tables that the current user owns or has
+ some privilege other than <literal>SELECT</literal> on.
+ </para>
+
+ <table>
+ <title><structname>table_constraints</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the constraint (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the constraint
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>constraint_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Type of the constraint: <literal>CHECK</literal>,
+ <literal>FOREIGN KEY</literal>, <literal>PRIMARY KEY</literal>,
+ or <literal>UNIQUE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_deferrable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the constraint is deferrable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>initially_deferred</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the constraint is deferrable and initially deferred, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>enforced</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in
+ <productname>PostgreSQL</productname> (currently always
+ <literal>YES</literal>)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>nulls_distinct</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ If the constraint is a unique constraint, then <literal>YES</literal>
+ if the constraint treats nulls as distinct or <literal>NO</literal> if
+ it treats nulls as not distinct, otherwise null for other types of
+ constraints.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-table-privileges">
+ <title><literal>table_privileges</literal></title>
+
+ <para>
+ The view <literal>table_privileges</literal> identifies all
+ privileges granted on tables or views to a currently enabled role
+ or by a currently enabled role. There is one row for each
+ combination of table, grantor, and grantee.
+ </para>
+
+ <table>
+ <title><structname>table_privileges</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Type of the privilege: <literal>SELECT</literal>,
+ <literal>INSERT</literal>, <literal>UPDATE</literal>,
+ <literal>DELETE</literal>, <literal>TRUNCATE</literal>,
+ <literal>REFERENCES</literal>, or <literal>TRIGGER</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>with_hierarchy</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ In the SQL standard, <literal>WITH HIERARCHY OPTION</literal>
+ is a separate (sub-)privilege allowing certain operations on
+ table inheritance hierarchies. In PostgreSQL, this is included
+ in the <literal>SELECT</literal> privilege, so this column
+ shows <literal>YES</literal> if the privilege
+ is <literal>SELECT</literal>, else <literal>NO</literal>.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-tables">
+ <title><literal>tables</literal></title>
+
+ <para>
+ The view <literal>tables</literal> contains all tables and views
+ defined in the current database. Only those tables and views are
+ shown that the current user has access to (by way of being the
+ owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>tables</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Type of the table: <literal>BASE TABLE</literal> for a
+ persistent base table (the normal table type),
+ <literal>VIEW</literal> for a view, <literal>FOREIGN</literal>
+ for a foreign table, or
+ <literal>LOCAL TEMPORARY</literal> for a temporary table
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>self_referencing_column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>reference_generation</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ If the table is a typed table, the name of the database that
+ contains the underlying data type (always the current
+ database), else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ If the table is a typed table, the name of the schema that
+ contains the underlying data type, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ If the table is a typed table, the name of the underlying data
+ type, else null.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_insertable_into</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the table is insertable into,
+ <literal>NO</literal> if not (Base tables are always insertable
+ into, views not necessarily.)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_typed</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the table is a typed table, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>commit_action</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Not yet implemented
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-transforms">
+ <title><literal>transforms</literal></title>
+
+ <para>
+ The view <literal>transforms</literal> contains information about the
+ transforms defined in the current database. More precisely, it contains a
+ row for each function contained in a transform (the <quote>from SQL</quote>
+ or <quote>to SQL</quote> function).
+ </para>
+
+ <table>
+ <title><structname>transforms</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the type the transform is for (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the type the transform is for
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the type the transform is for
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>group_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The SQL standard allows defining transforms in <quote>groups</quote>,
+ and selecting a group at run time. PostgreSQL does not support this.
+ Instead, transforms are specific to a language. As a compromise, this
+ field contains the language the transform is for.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>transform_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>FROM SQL</literal> or <literal>TO SQL</literal>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-triggered-update-columns">
+ <title><literal>triggered_update_columns</literal></title>
+
+ <para>
+ For triggers in the current database that specify a column list
+ (like <literal>UPDATE OF column1, column2</literal>), the
+ view <literal>triggered_update_columns</literal> identifies these
+ columns. Triggers that do not specify a column list are not
+ included in this view. Only those columns are shown that the
+ current user owns or has some privilege other than
+ <literal>SELECT</literal> on.
+ </para>
+
+ <table>
+ <title><structname>triggered_update_columns</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>trigger_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the trigger (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>trigger_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the trigger
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>trigger_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the trigger
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that the trigger
+ is defined on (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that the trigger is defined on
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_table</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that the trigger is defined on
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_column</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column that the trigger is defined on
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-triggers">
+ <title><literal>triggers</literal></title>
+
+ <para>
+ The view <literal>triggers</literal> contains all triggers defined
+ in the current database on tables and views that the current user owns
+ or has some privilege other than <literal>SELECT</literal> on.
+ </para>
+
+ <table>
+ <title><structname>triggers</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>trigger_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the trigger (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>trigger_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the trigger
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>trigger_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the trigger
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_manipulation</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Event that fires the trigger (<literal>INSERT</literal>,
+ <literal>UPDATE</literal>, or <literal>DELETE</literal>)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that the trigger
+ is defined on (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that the trigger is defined on
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>event_object_table</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that the trigger is defined on
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_order</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Firing order among triggers on the same table having the same
+ <literal>event_manipulation</literal>,
+ <literal>action_timing</literal>, and
+ <literal>action_orientation</literal>. In
+ <productname>PostgreSQL</productname>, triggers are fired in name
+ order, so this column reflects that.
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_condition</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>WHEN</literal> condition of the trigger, null if none
+ (also null if the table is not owned by a currently enabled
+ role)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_statement</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Statement that is executed by the trigger (currently always
+ <literal>EXECUTE FUNCTION
+ <replaceable>function</replaceable>(...)</literal>)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_orientation</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Identifies whether the trigger fires once for each processed
+ row or once for each statement (<literal>ROW</literal> or
+ <literal>STATEMENT</literal>)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_timing</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Time at which the trigger fires (<literal>BEFORE</literal>,
+ <literal>AFTER</literal>, or <literal>INSTEAD OF</literal>)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_reference_old_table</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the <quote>old</quote> transition table, or null if none
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_reference_new_table</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the <quote>new</quote> transition table, or null if none
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_reference_old_row</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>action_reference_new_row</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>created</structfield> <type>time_stamp</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ Triggers in <productname>PostgreSQL</productname> have two
+ incompatibilities with the SQL standard that affect the
+ representation in the information schema. First, trigger names are
+ local to each table in <productname>PostgreSQL</productname>, rather
+ than being independent schema objects. Therefore there can be duplicate
+ trigger names defined in one schema, so long as they belong to
+ different tables. (<literal>trigger_catalog</literal> and
+ <literal>trigger_schema</literal> are really the values pertaining
+ to the table that the trigger is defined on.) Second, triggers can
+ be defined to fire on multiple events in
+ <productname>PostgreSQL</productname> (e.g., <literal>ON INSERT OR
+ UPDATE</literal>), whereas the SQL standard only allows one. If a
+ trigger is defined to fire on multiple events, it is represented as
+ multiple rows in the information schema, one for each type of
+ event. As a consequence of these two issues, the primary key of
+ the view <literal>triggers</literal> is really
+ <literal>(trigger_catalog, trigger_schema, event_object_table,
+ trigger_name, event_manipulation)</literal> instead of
+ <literal>(trigger_catalog, trigger_schema, trigger_name)</literal>,
+ which is what the SQL standard specifies. Nonetheless, if you
+ define your triggers in a manner that conforms with the SQL
+ standard (trigger names unique in the schema and only one event
+ type per trigger), this will not affect you.
+ </para>
+
+ <note>
+ <para>
+ Prior to <productname>PostgreSQL</productname> 9.1, this view's columns
+ <structfield>action_timing</structfield>,
+ <structfield>action_reference_old_table</structfield>,
+ <structfield>action_reference_new_table</structfield>,
+ <structfield>action_reference_old_row</structfield>, and
+ <structfield>action_reference_new_row</structfield>
+ were named
+ <structfield>condition_timing</structfield>,
+ <structfield>condition_reference_old_table</structfield>,
+ <structfield>condition_reference_new_table</structfield>,
+ <structfield>condition_reference_old_row</structfield>, and
+ <structfield>condition_reference_new_row</structfield>
+ respectively.
+ That was how they were named in the SQL:1999 standard.
+ The new naming conforms to SQL:2003 and later.
+ </para>
+ </note>
+ </sect1>
+
+ <sect1 id="infoschema-udt-privileges">
+ <title><literal>udt_privileges</literal></title>
+
+ <para>
+ The view <literal>udt_privileges</literal> identifies
+ <literal>USAGE</literal> privileges granted on user-defined types to a
+ currently enabled role or by a currently enabled role. There is one row for
+ each combination of type, grantor, and grantee. This view shows only
+ composite types (see under <xref linkend="infoschema-user-defined-types"/>
+ for why); see
+ <xref linkend="infoschema-usage-privileges"/> for domain privileges.
+ </para>
+
+ <table>
+ <title><structname>udt_privileges</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the type (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>udt_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>TYPE USAGE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-usage-privileges">
+ <title><literal>usage_privileges</literal></title>
+
+ <para>
+ The view <literal>usage_privileges</literal> identifies
+ <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
+ collations, domains, foreign-data wrappers, foreign servers, and sequences. There is one
+ row for each combination of object, grantor, and grantee.
+ </para>
+
+ <para>
+ Since collations 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 collations. The other
+ object types, however, show real privileges.
+ </para>
+
+ <para>
+ In PostgreSQL, sequences also support <literal>SELECT</literal>
+ and <literal>UPDATE</literal> privileges in addition to
+ the <literal>USAGE</literal> privilege. These are nonstandard and therefore
+ not visible in the information schema.
+ </para>
+
+ <table>
+ <title><structname>usage_privileges</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantor</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that granted the privilege
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>grantee</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the role that the privilege was granted to
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the object (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the object, if applicable,
+ else an empty string
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the object
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>object_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>COLLATION</literal> or <literal>DOMAIN</literal> or <literal>FOREIGN DATA WRAPPER</literal> or <literal>FOREIGN SERVER</literal> or <literal>SEQUENCE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>privilege_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Always <literal>USAGE</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_grantable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the privilege is grantable, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-user-defined-types">
+ <title><literal>user_defined_types</literal></title>
+
+ <para>
+ The view <literal>user_defined_types</literal> currently contains
+ all composite types defined in the current database.
+ Only those types are shown that the current user has access to (by way
+ of being the owner or having some privilege).
+ </para>
+
+ <para>
+ SQL knows about two kinds of user-defined types: structured types
+ (also known as composite types
+ in <productname>PostgreSQL</productname>) and distinct types (not
+ implemented in <productname>PostgreSQL</productname>). To be
+ future-proof, use the
+ column <literal>user_defined_type_category</literal> to
+ differentiate between these. Other user-defined types such as base
+ types and enums, which are <productname>PostgreSQL</productname>
+ extensions, are not shown here. For domains,
+ see <xref linkend="infoschema-domains"/> instead.
+ </para>
+
+ <table>
+ <title><structname>user_defined_types</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the type (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the type
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>user_defined_type_category</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Currently always <literal>STRUCTURED</literal>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_instantiable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_final</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordering_form</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordering_category</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordering_routine_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordering_routine_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ordering_routine_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>reference_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>data_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_maximum_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_octet_length</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>character_set_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>collation_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_precision_radix</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>numeric_scale</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>datetime_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_type</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>interval_precision</structfield> <type>cardinal_number</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>source_dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>ref_dtd_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Applies to a feature not available in <productname>PostgreSQL</productname>
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-user-mapping-options">
+ <title><literal>user_mapping_options</literal></title>
+
+ <para>
+ The view <literal>user_mapping_options</literal> contains all the
+ options defined for user mappings in the current database. Only
+ those user mappings are shown where the current user has access to
+ the corresponding foreign server (by way of being the owner or
+ having some privilege).
+ </para>
+
+ <table>
+ <title><structname>user_mapping_options</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>authorization_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the user being mapped,
+ or <literal>PUBLIC</literal> if the mapping is public
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign server used by this
+ mapping is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign server used by this mapping
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of an option
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>option_value</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Value of the option. This column will show as null
+ unless the current user is the user being mapped, or the mapping
+ is for <literal>PUBLIC</literal> and the current user is the
+ server owner, or the current user is a superuser. The intent is
+ to protect password information stored as user mapping
+ option.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-user-mappings">
+ <title><literal>user_mappings</literal></title>
+
+ <para>
+ The view <literal>user_mappings</literal> contains all user
+ mappings defined in the current database. Only those user mappings
+ are shown where the current user has access to the corresponding
+ foreign server (by way of being the owner or having some
+ privilege).
+ </para>
+
+ <table>
+ <title><structname>user_mappings</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>authorization_identifier</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the user being mapped,
+ or <literal>PUBLIC</literal> if the mapping is public
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that the foreign server used by this
+ mapping is defined in (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>foreign_server_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the foreign server used by this mapping
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-view-column-usage">
+ <title><literal>view_column_usage</literal></title>
+
+ <para>
+ The view <literal>view_column_usage</literal> identifies all
+ columns that are used in the query expression of a view (the
+ <command>SELECT</command> statement that defines the view). A
+ column is only included if the table that contains the column is
+ owned by a currently enabled role.
+ </para>
+
+ <note>
+ <para>
+ Columns of system tables are not included. This should be fixed
+ sometime.
+ </para>
+ </note>
+
+ <table>
+ <title><structname>view_column_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the view (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that contains the
+ column that is used by the view (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that contains the
+ column that is used by the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that contains the column that is used by the
+ view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>column_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the column that is used by the view
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-view-routine-usage">
+ <title><literal>view_routine_usage</literal></title>
+
+ <para>
+ The view <literal>view_routine_usage</literal> identifies all
+ routines (functions and procedures) that are used in the query
+ expression of a view (the <command>SELECT</command> statement that
+ defines the view). A routine is only included if that routine is
+ owned by a currently enabled role.
+ </para>
+
+ <table>
+ <title><structname>view_routine_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the view (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database containing the function (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema containing the function
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>specific_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ The <quote>specific name</quote> of the function. See <xref linkend="infoschema-routines"/> for more information.
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-view-table-usage">
+ <title><literal>view_table_usage</literal></title>
+
+ <para>
+ The view <literal>view_table_usage</literal> identifies all tables
+ that are used in the query expression of a view (the
+ <command>SELECT</command> statement that defines the view). A
+ table is only included if that table is owned by a currently
+ enabled role.
+ </para>
+
+ <note>
+ <para>
+ System tables are not included. This should be fixed sometime.
+ </para>
+ </note>
+
+ <table>
+ <title><structname>view_table_usage</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the view (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the table that is
+ used by the view (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the table that is used by the
+ view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the table that is used by the view
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+ <sect1 id="infoschema-views">
+ <title><literal>views</literal></title>
+
+ <para>
+ The view <literal>views</literal> contains all views defined in the
+ current database. Only those views are shown that the current user
+ has access to (by way of being the owner or having some privilege).
+ </para>
+
+ <table>
+ <title><structname>views</structname> Columns</title>
+ <tgroup cols="1">
+ <thead>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ Column Type
+ </para>
+ <para>
+ Description
+ </para></entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_catalog</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the database that contains the view (always the current database)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_schema</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the schema that contains the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>table_name</structfield> <type>sql_identifier</type>
+ </para>
+ <para>
+ Name of the view
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>view_definition</structfield> <type>character_data</type>
+ </para>
+ <para>
+ Query expression defining the view (null if the view is not
+ owned by a currently enabled role)
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>check_option</structfield> <type>character_data</type>
+ </para>
+ <para>
+ <literal>CASCADED</literal> or <literal>LOCAL</literal> if the view
+ has a <literal>CHECK OPTION</literal> defined on it,
+ <literal>NONE</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_updatable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the view is updatable (allows
+ <command>UPDATE</command> and <command>DELETE</command>),
+ <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_insertable_into</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the view is insertable into (allows
+ <command>INSERT</command>), <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_trigger_updatable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the view has an <literal>INSTEAD OF</literal>
+ <command>UPDATE</command> trigger defined on it, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_trigger_deletable</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the view has an <literal>INSTEAD OF</literal>
+ <command>DELETE</command> trigger defined on it, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+
+ <row>
+ <entry role="catalog_table_entry"><para role="column_definition">
+ <structfield>is_trigger_insertable_into</structfield> <type>yes_or_no</type>
+ </para>
+ <para>
+ <literal>YES</literal> if the view has an <literal>INSTEAD OF</literal>
+ <command>INSERT</command> trigger defined on it, <literal>NO</literal> if not
+ </para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect1>
+
+</chapter>