diff options
Diffstat (limited to 'doc/src/sgml/information_schema.sgml')
-rw-r--r-- | doc/src/sgml/information_schema.sgml | 8682 |
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 — 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> |