diff options
Diffstat (limited to 'doc/src/sgml/catalogs.sgml')
-rw-r--r-- | doc/src/sgml/catalogs.sgml | 9584 |
1 files changed, 9584 insertions, 0 deletions
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml new file mode 100644 index 0000000..7aaf729 --- /dev/null +++ b/doc/src/sgml/catalogs.sgml @@ -0,0 +1,9584 @@ +<!-- doc/src/sgml/catalogs.sgml --> +<!-- + Documentation of the system catalogs, directed toward PostgreSQL developers + --> + +<chapter id="catalogs"> + <title>System Catalogs</title> + + <para> + The system catalogs are the place where a relational database + management system stores schema metadata, such as information about + tables and columns, and internal bookkeeping information. + <productname>PostgreSQL</productname>'s system catalogs are regular + tables. You can drop and recreate the tables, add columns, insert + and update values, and severely mess up your system that way. + Normally, one should not change the system catalogs by hand, there + are normally SQL commands to do that. (For example, <command>CREATE + DATABASE</command> inserts a row into the + <structname>pg_database</structname> catalog — and actually + creates the database on disk.) There are some exceptions for + particularly esoteric operations, but many of those have been made + available as SQL commands over time, and so the need for direct manipulation + of the system catalogs is ever decreasing. + </para> + + <sect1 id="catalogs-overview"> + <title>Overview</title> + + <para> + <xref linkend="catalog-table"/> lists the system catalogs. + More detailed documentation of each catalog follows below. + </para> + + <para> + Most system catalogs are copied from the template database during + database creation and are thereafter database-specific. A few + catalogs are physically shared across all databases in a cluster; + these are noted in the descriptions of the individual catalogs. + </para> + + <table id="catalog-table"> + <title>System Catalogs</title> + + <tgroup cols="2"> + <thead> + <row> + <entry>Catalog Name</entry> + <entry>Purpose</entry> + </row> + </thead> + + <tbody> + <row> + <entry><link linkend="catalog-pg-aggregate"><structname>pg_aggregate</structname></link></entry> + <entry>aggregate functions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-am"><structname>pg_am</structname></link></entry> + <entry>relation access methods</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-amop"><structname>pg_amop</structname></link></entry> + <entry>access method operators</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-amproc"><structname>pg_amproc</structname></link></entry> + <entry>access method support functions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-attrdef"><structname>pg_attrdef</structname></link></entry> + <entry>column default values</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link></entry> + <entry>table columns (<quote>attributes</quote>)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-authid"><structname>pg_authid</structname></link></entry> + <entry>authorization identifiers (roles)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-auth-members"><structname>pg_auth_members</structname></link></entry> + <entry>authorization identifier membership relationships</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-cast"><structname>pg_cast</structname></link></entry> + <entry>casts (data type conversions)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-class"><structname>pg_class</structname></link></entry> + <entry>tables, indexes, sequences, views (<quote>relations</quote>)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-collation"><structname>pg_collation</structname></link></entry> + <entry>collations (locale information)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link></entry> + <entry>check constraints, unique constraints, primary key constraints, foreign key constraints</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-conversion"><structname>pg_conversion</structname></link></entry> + <entry>encoding conversion information</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-database"><structname>pg_database</structname></link></entry> + <entry>databases within this database cluster</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-db-role-setting"><structname>pg_db_role_setting</structname></link></entry> + <entry>per-role and per-database settings</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-default-acl"><structname>pg_default_acl</structname></link></entry> + <entry>default privileges for object types</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-depend"><structname>pg_depend</structname></link></entry> + <entry>dependencies between database objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-description"><structname>pg_description</structname></link></entry> + <entry>descriptions or comments on database objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-enum"><structname>pg_enum</structname></link></entry> + <entry>enum label and value definitions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-event-trigger"><structname>pg_event_trigger</structname></link></entry> + <entry>event triggers</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-extension"><structname>pg_extension</structname></link></entry> + <entry>installed extensions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-foreign-data-wrapper"><structname>pg_foreign_data_wrapper</structname></link></entry> + <entry>foreign-data wrapper definitions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-foreign-server"><structname>pg_foreign_server</structname></link></entry> + <entry>foreign server definitions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-foreign-table"><structname>pg_foreign_table</structname></link></entry> + <entry>additional foreign table information</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-index"><structname>pg_index</structname></link></entry> + <entry>additional index information</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-inherits"><structname>pg_inherits</structname></link></entry> + <entry>table inheritance hierarchy</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-init-privs"><structname>pg_init_privs</structname></link></entry> + <entry>object initial privileges</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-language"><structname>pg_language</structname></link></entry> + <entry>languages for writing functions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-largeobject"><structname>pg_largeobject</structname></link></entry> + <entry>data pages for large objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-largeobject-metadata"><structname>pg_largeobject_metadata</structname></link></entry> + <entry>metadata for large objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link></entry> + <entry>schemas</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link></entry> + <entry>access method operator classes</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-operator"><structname>pg_operator</structname></link></entry> + <entry>operators</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-opfamily"><structname>pg_opfamily</structname></link></entry> + <entry>access method operator families</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-parameter-acl"><structname>pg_parameter_acl</structname></link></entry> + <entry>configuration parameters for which privileges have been granted</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-partitioned-table"><structname>pg_partitioned_table</structname></link></entry> + <entry>information about partition key of tables</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-policy"><structname>pg_policy</structname></link></entry> + <entry>row-security policies</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-proc"><structname>pg_proc</structname></link></entry> + <entry>functions and procedures</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-publication"><structname>pg_publication</structname></link></entry> + <entry>publications for logical replication</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-publication-namespace"><structname>pg_publication_namespace</structname></link></entry> + <entry>schema to publication mapping</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-publication-rel"><structname>pg_publication_rel</structname></link></entry> + <entry>relation to publication mapping</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-range"><structname>pg_range</structname></link></entry> + <entry>information about range types</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-replication-origin"><structname>pg_replication_origin</structname></link></entry> + <entry>registered replication origins</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-rewrite"><structname>pg_rewrite</structname></link></entry> + <entry>query rewrite rules</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-seclabel"><structname>pg_seclabel</structname></link></entry> + <entry>security labels on database objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-sequence"><structname>pg_sequence</structname></link></entry> + <entry>information about sequences</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-shdepend"><structname>pg_shdepend</structname></link></entry> + <entry>dependencies on shared objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link></entry> + <entry>comments on shared objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-shseclabel"><structname>pg_shseclabel</structname></link></entry> + <entry>security labels on shared database objects</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-statistic"><structname>pg_statistic</structname></link></entry> + <entry>planner statistics</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-statistic-ext"><structname>pg_statistic_ext</structname></link></entry> + <entry>extended planner statistics (definition)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-statistic-ext-data"><structname>pg_statistic_ext_data</structname></link></entry> + <entry>extended planner statistics (built statistics)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-subscription"><structname>pg_subscription</structname></link></entry> + <entry>logical replication subscriptions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-subscription-rel"><structname>pg_subscription_rel</structname></link></entry> + <entry>relation state for subscriptions</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-tablespace"><structname>pg_tablespace</structname></link></entry> + <entry>tablespaces within this database cluster</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-transform"><structname>pg_transform</structname></link></entry> + <entry>transforms (data type to procedural language conversions)</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-trigger"><structname>pg_trigger</structname></link></entry> + <entry>triggers</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-ts-config"><structname>pg_ts_config</structname></link></entry> + <entry>text search configurations</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-ts-config-map"><structname>pg_ts_config_map</structname></link></entry> + <entry>text search configurations' token mappings</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-ts-dict"><structname>pg_ts_dict</structname></link></entry> + <entry>text search dictionaries</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-ts-parser"><structname>pg_ts_parser</structname></link></entry> + <entry>text search parsers</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-ts-template"><structname>pg_ts_template</structname></link></entry> + <entry>text search templates</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-type"><structname>pg_type</structname></link></entry> + <entry>data types</entry> + </row> + + <row> + <entry><link linkend="catalog-pg-user-mapping"><structname>pg_user_mapping</structname></link></entry> + <entry>mappings of users to foreign servers</entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-aggregate"> + <title><structname>pg_aggregate</structname></title> + + <indexterm zone="catalog-pg-aggregate"> + <primary>pg_aggregate</primary> + </indexterm> + + <para> + The catalog <structname>pg_aggregate</structname> stores information about + aggregate functions. An aggregate function is a function that + operates on a set of values (typically one column from each row + that matches a query condition) and returns a single value computed + from all these values. Typical aggregate functions are + <function>sum</function>, <function>count</function>, and + <function>max</function>. Each entry in + <structname>pg_aggregate</structname> is an extension of an entry + in <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>. + The <structname>pg_proc</structname> entry carries the aggregate's name, + input and output data types, and other information that is similar to + ordinary functions. + </para> + + <table> + <title><structname>pg_aggregate</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>aggfnoid</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + <structname>pg_proc</structname> OID of the aggregate function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggkind</structfield> <type>char</type> + </para> + <para> + Aggregate kind: + <literal>n</literal> for <quote>normal</quote> aggregates, + <literal>o</literal> for <quote>ordered-set</quote> aggregates, or + <literal>h</literal> for <quote>hypothetical-set</quote> aggregates + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggnumdirectargs</structfield> <type>int2</type> + </para> + <para> + Number of direct (non-aggregated) arguments of an ordered-set or + hypothetical-set aggregate, counting a variadic array as one argument. + If equal to <structfield>pronargs</structfield>, the aggregate must be variadic + and the variadic array describes the aggregated arguments as well as + the final direct arguments. + Always zero for normal aggregates. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggtransfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Transition function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggfinalfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Final function (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggcombinefn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Combine function (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggserialfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Serialization function (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggdeserialfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Deserialization function (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggmtransfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Forward transition function for moving-aggregate mode (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggminvtransfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Inverse transition function for moving-aggregate mode (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggmfinalfn</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Final function for moving-aggregate mode (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggfinalextra</structfield> <type>bool</type> + </para> + <para> + True to pass extra dummy arguments to <structfield>aggfinalfn</structfield> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggmfinalextra</structfield> <type>bool</type> + </para> + <para> + True to pass extra dummy arguments to <structfield>aggmfinalfn</structfield> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggfinalmodify</structfield> <type>char</type> + </para> + <para> + Whether <structfield>aggfinalfn</structfield> modifies the + transition state value: + <literal>r</literal> if it is read-only, + <literal>s</literal> if the <structfield>aggtransfn</structfield> + cannot be applied after the <structfield>aggfinalfn</structfield>, or + <literal>w</literal> if it writes on the value + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggmfinalmodify</structfield> <type>char</type> + </para> + <para> + Like <structfield>aggfinalmodify</structfield>, but for + the <structfield>aggmfinalfn</structfield> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggsortop</structfield> <type>oid</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Associated sort operator (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggtranstype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Data type of the aggregate function's internal transition (state) data + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggtransspace</structfield> <type>int4</type> + </para> + <para> + Approximate average size (in bytes) of the transition state + data, or zero to use a default estimate + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggmtranstype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Data type of the aggregate function's internal transition (state) + data for moving-aggregate mode (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggmtransspace</structfield> <type>int4</type> + </para> + <para> + Approximate average size (in bytes) of the transition state data + for moving-aggregate mode, or zero to use a default estimate + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>agginitval</structfield> <type>text</type> + </para> + <para> + The initial value of the transition state. This is a text + field containing the initial value in its external string + representation. If this field is null, the transition state + value starts out null. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>aggminitval</structfield> <type>text</type> + </para> + <para> + The initial value of the transition state for moving-aggregate mode. + This is a text field containing the initial value in its external + string representation. If this field is null, the transition state + value starts out null. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + New aggregate functions are registered with the <link + linkend="sql-createaggregate"><command>CREATE AGGREGATE</command></link> + command. See <xref linkend="xaggr"/> for more information about + writing aggregate functions and the meaning of the transition + functions, etc. + </para> + + </sect1> + + + <sect1 id="catalog-pg-am"> + <title><structname>pg_am</structname></title> + + <indexterm zone="catalog-pg-am"> + <primary>pg_am</primary> + </indexterm> + + <para> + The catalog <structname>pg_am</structname> stores information about + relation access methods. There is one row for each access method supported + by the system. + Currently, only tables and indexes have access methods. The requirements for table + and index access methods are discussed in detail in <xref linkend="tableam"/> and + <xref linkend="indexam"/> respectively. + </para> + + <table> + <title><structname>pg_am</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amname</structfield> <type>name</type> + </para> + <para> + Name of the access method + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amhandler</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of a handler function that is responsible for supplying information + about the access method + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amtype</structfield> <type>char</type> + </para> + <para> + <literal>t</literal> = table (including materialized views), + <literal>i</literal> = index. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <note> + <para> + Before <productname>PostgreSQL</productname> 9.6, <structname>pg_am</structname> + contained many additional columns representing properties of index access + methods. That data is now only directly visible at the C code level. + However, <function>pg_index_column_has_property()</function> and related + functions have been added to allow SQL queries to inspect index access + method properties; see <xref linkend="functions-info-catalog-table"/>. + </para> + </note> + + </sect1> + + + <sect1 id="catalog-pg-amop"> + <title><structname>pg_amop</structname></title> + + <indexterm zone="catalog-pg-amop"> + <primary>pg_amop</primary> + </indexterm> + + <para> + The catalog <structname>pg_amop</structname> stores information about + operators associated with access method operator families. There is one + row for each operator that is a member of an operator family. A family + member can be either a <firstterm>search</firstterm> operator or an + <firstterm>ordering</firstterm> operator. An operator + can appear in more than one family, but cannot appear in more than one + search position nor more than one ordering position within a family. + (It is allowed, though unlikely, for an operator to be used for both + search and ordering purposes.) + </para> + + <table> + <title><structname>pg_amop</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amopfamily</structfield> <type>oid</type> + (references <link linkend="catalog-pg-opfamily"><structname>pg_opfamily</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The operator family this entry is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amoplefttype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Left-hand input data type of operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amoprighttype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Right-hand input data type of operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amopstrategy</structfield> <type>int2</type> + </para> + <para> + Operator strategy number + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amoppurpose</structfield> <type>char</type> + </para> + <para> + Operator purpose, either <literal>s</literal> for search or + <literal>o</literal> for ordering + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amopopr</structfield> <type>oid</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amopmethod</structfield> <type>oid</type> + (references <link linkend="catalog-pg-am"><structname>pg_am</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Index access method operator family is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amopsortfamily</structfield> <type>oid</type> + (references <link linkend="catalog-pg-opfamily"><structname>pg_opfamily</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The B-tree operator family this entry sorts according to, if an + ordering operator; zero if a search operator + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + A <quote>search</quote> operator entry indicates that an index of this operator + family can be searched to find all rows satisfying + <literal>WHERE</literal> + <replaceable>indexed_column</replaceable> + <replaceable>operator</replaceable> + <replaceable>constant</replaceable>. + Obviously, such an operator must return <type>boolean</type>, and its left-hand input + type must match the index's column data type. + </para> + + <para> + An <quote>ordering</quote> operator entry indicates that an index of this + operator family can be scanned to return rows in the order represented by + <literal>ORDER BY</literal> + <replaceable>indexed_column</replaceable> + <replaceable>operator</replaceable> + <replaceable>constant</replaceable>. + Such an operator could return any sortable data type, though again + its left-hand input type must match the index's column data type. + The exact semantics of the <literal>ORDER BY</literal> are specified by the + <structfield>amopsortfamily</structfield> column, which must reference + a B-tree operator family for the operator's result type. + </para> + + <note> + <para> + At present, it's assumed that the sort order for an ordering operator + is the default for the referenced operator family, i.e., <literal>ASC NULLS + LAST</literal>. This might someday be relaxed by adding additional columns + to specify sort options explicitly. + </para> + </note> + + <para> + An entry's <structfield>amopmethod</structfield> must match the + <structfield>opfmethod</structfield> of its containing operator family (including + <structfield>amopmethod</structfield> here is an intentional denormalization of the + catalog structure for performance reasons). Also, + <structfield>amoplefttype</structfield> and <structfield>amoprighttype</structfield> must match + the <structfield>oprleft</structfield> and <structfield>oprright</structfield> fields of the + referenced <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link> entry. + </para> + + </sect1> + + + <sect1 id="catalog-pg-amproc"> + <title><structname>pg_amproc</structname></title> + + <indexterm zone="catalog-pg-amproc"> + <primary>pg_amproc</primary> + </indexterm> + + <para> + The catalog <structname>pg_amproc</structname> stores information about + support functions associated with access method operator families. There + is one row for each support function belonging to an operator family. + </para> + + <table> + <title><structname>pg_amproc</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amprocfamily</structfield> <type>oid</type> + (references <link linkend="catalog-pg-opfamily"><structname>pg_opfamily</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The operator family this entry is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amproclefttype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Left-hand input data type of associated operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amprocrighttype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Right-hand input data type of associated operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amprocnum</structfield> <type>int2</type> + </para> + <para> + Support function number + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>amproc</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the function + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + The usual interpretation of the + <structfield>amproclefttype</structfield> and <structfield>amprocrighttype</structfield> fields + is that they identify the left and right input types of the operator(s) + that a particular support function supports. For some access methods + these match the input data type(s) of the support function itself, for + others not. There is a notion of <quote>default</quote> support functions for + an index, which are those with <structfield>amproclefttype</structfield> and + <structfield>amprocrighttype</structfield> both equal to the index operator class's + <structfield>opcintype</structfield>. + </para> + + </sect1> + + + <sect1 id="catalog-pg-attrdef"> + <title><structname>pg_attrdef</structname></title> + + <indexterm zone="catalog-pg-attrdef"> + <primary>pg_attrdef</primary> + </indexterm> + + <para> + The catalog <structname>pg_attrdef</structname> stores column default + values. The main information about columns is stored in + <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>. + Only columns for which a default value has been explicitly set will have + an entry here. + </para> + + <table> + <title><structname>pg_attrdef</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>adrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table this column belongs to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>adnum</structfield> <type>int2</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + The number of the column + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>adbin</structfield> <type>pg_node_tree</type> + </para> + <para> + The column default value, in <function>nodeToString()</function> + representation. Use <literal>pg_get_expr(adbin, adrelid)</literal> to + convert it to an SQL expression. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-attribute"> + <title><structname>pg_attribute</structname></title> + + <indexterm zone="catalog-pg-attribute"> + <primary>pg_attribute</primary> + </indexterm> + + <para> + The catalog <structname>pg_attribute</structname> stores information about + table columns. There will be exactly one + <structname>pg_attribute</structname> row for every column in every + table in the database. (There will also be attribute entries for + indexes, and indeed all objects that have + <link linkend="catalog-pg-class"><structname>pg_class</structname></link> + entries.) + </para> + + <para> + The term attribute is equivalent to column and is used for + historical reasons. + </para> + + <table> + <title><structname>pg_attribute</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>attrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table this column belongs to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attname</structfield> <type>name</type> + </para> + <para> + The column name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>atttypid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The data type of this column (zero for a dropped column) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attstattarget</structfield> <type>int4</type> + </para> + <para> + <structfield>attstattarget</structfield> controls the level of detail + of statistics accumulated for this column by + <link linkend="sql-analyze"><command>ANALYZE</command></link>. + A zero value indicates that no statistics should be collected. + A negative value says to use the system default statistics target. + The exact meaning of positive values is data type-dependent. + For scalar data types, <structfield>attstattarget</structfield> + is both the target number of <quote>most common values</quote> + to collect, and the target number of histogram bins to create. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attlen</structfield> <type>int2</type> + </para> + <para> + A copy of <literal>pg_type.typlen</literal> of this column's + type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attnum</structfield> <type>int2</type> + </para> + <para> + The number of the column. Ordinary columns are numbered from 1 + up. System columns, such as <structfield>ctid</structfield>, + have (arbitrary) negative numbers. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attndims</structfield> <type>int4</type> + </para> + <para> + Number of dimensions, if the column is an array type; otherwise 0. + (Presently, the number of dimensions of an array is not enforced, + so any nonzero value effectively means <quote>it's an array</quote>.) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attcacheoff</structfield> <type>int4</type> + </para> + <para> + Always -1 in storage, but when loaded into a row descriptor + in memory this might be updated to cache the offset of the attribute + within the row + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>atttypmod</structfield> <type>int4</type> + </para> + <para> + <structfield>atttypmod</structfield> records type-specific data + supplied at table creation time (for example, the maximum + length of a <type>varchar</type> column). It is passed to + type-specific input functions and length coercion functions. + The value will generally be -1 for types that do not need <structfield>atttypmod</structfield>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attbyval</structfield> <type>bool</type> + </para> + <para> + A copy of <literal>pg_type.typbyval</literal> of this column's type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attalign</structfield> <type>char</type> + </para> + <para> + A copy of <literal>pg_type.typalign</literal> of this column's type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attstorage</structfield> <type>char</type> + </para> + <para> + Normally a copy of <literal>pg_type.typstorage</literal> of this + column's type. For TOAST-able data types, this can be altered + after column creation to control storage policy. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attcompression</structfield> <type>char</type> + </para> + <para> + The current compression method of the column. Typically this is + <literal>'\0'</literal> to specify use of the current default setting + (see <xref linkend="guc-default-toast-compression"/>). Otherwise, + <literal>'p'</literal> selects pglz compression, while + <literal>'l'</literal> selects <productname>LZ4</productname> + compression. However, this field is ignored + whenever <structfield>attstorage</structfield> does not allow + compression. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attnotnull</structfield> <type>bool</type> + </para> + <para> + This represents a not-null constraint. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>atthasdef</structfield> <type>bool</type> + </para> + <para> + This column has a default expression or generation expression, in which + case there will be a corresponding entry in the + <link linkend="catalog-pg-attrdef"><structname>pg_attrdef</structname></link> catalog that actually defines the + expression. (Check <structfield>attgenerated</structfield> to + determine whether this is a default or a generation expression.) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>atthasmissing</structfield> <type>bool</type> + </para> + <para> + This column has a value which is used where the column is entirely + missing from the row, as happens when a column is added with a + non-volatile <literal>DEFAULT</literal> value after the row is created. + The actual value used is stored in the + <structfield>attmissingval</structfield> column. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attidentity</structfield> <type>char</type> + </para> + <para> + If a zero byte (<literal>''</literal>), then not an identity column. + Otherwise, <literal>a</literal> = generated + always, <literal>d</literal> = generated by default. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attgenerated</structfield> <type>char</type> + </para> + <para> + If a zero byte (<literal>''</literal>), then not a generated column. + Otherwise, <literal>s</literal> = stored. (Other values might be added + in the future.) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attisdropped</structfield> <type>bool</type> + </para> + <para> + This column has been dropped and is no longer valid. A dropped + column is still physically present in the table, but is + ignored by the parser and so cannot be accessed via SQL. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attislocal</structfield> <type>bool</type> + </para> + <para> + This column is defined locally in the relation. Note that a column can + be locally defined and inherited simultaneously. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attinhcount</structfield> <type>int4</type> + </para> + <para> + The number of direct ancestors this column has. A column with a + nonzero number of ancestors cannot be dropped nor renamed. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attcollation</structfield> <type>oid</type> + (references <link linkend="catalog-pg-collation"><structname>pg_collation</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The defined collation of the column, or zero if the column is + not of a collatable data type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attacl</structfield> <type>aclitem[]</type> + </para> + <para> + Column-level access privileges, if any have been granted specifically + on this column + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attoptions</structfield> <type>text[]</type> + </para> + <para> + Attribute-level options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attfdwoptions</structfield> <type>text[]</type> + </para> + <para> + Attribute-level foreign data wrapper options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>attmissingval</structfield> <type>anyarray</type> + </para> + <para> + This column has a one element array containing the value used when the + column is entirely missing from the row, as happens when the column is + added with a non-volatile <literal>DEFAULT</literal> value after the + row is created. The value is only used when + <structfield>atthasmissing</structfield> is true. If there is no value + the column is null. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + In a dropped column's <structname>pg_attribute</structname> entry, + <structfield>atttypid</structfield> is reset to zero, but + <structfield>attlen</structfield> and the other fields copied from + <link linkend="catalog-pg-type"><structname>pg_type</structname></link> are still valid. This arrangement is needed + to cope with the situation where the dropped column's data type was + later dropped, and so there is no <structname>pg_type</structname> row anymore. + <structfield>attlen</structfield> and the other fields can be used + to interpret the contents of a row of the table. + </para> + </sect1> + + + <sect1 id="catalog-pg-authid"> + <title><structname>pg_authid</structname></title> + + <indexterm zone="catalog-pg-authid"> + <primary>pg_authid</primary> + </indexterm> + + <para> + The catalog <structname>pg_authid</structname> contains information about + database authorization identifiers (roles). A role subsumes the concepts + of <quote>users</quote> and <quote>groups</quote>. A user is essentially just a + role with the <structfield>rolcanlogin</structfield> flag set. Any role (with or + without <structfield>rolcanlogin</structfield>) can have other roles as members; see + <link linkend="catalog-pg-auth-members"><structname>pg_auth_members</structname></link>. + </para> + + <para> + Since this catalog contains passwords, it must not be publicly readable. + <link linkend="view-pg-roles"><structname>pg_roles</structname></link> + is a publicly readable view on + <structname>pg_authid</structname> that blanks out the password field. + </para> + + <para> + <xref linkend="user-manag"/> contains detailed information about user and + privilege management. + </para> + + <para> + Because user identities are cluster-wide, + <structname>pg_authid</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_authid</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_authid</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolname</structfield> <type>name</type> + </para> + <para> + Role name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolsuper</structfield> <type>bool</type> + </para> + <para> + Role has superuser privileges + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolinherit</structfield> <type>bool</type> + </para> + <para> + Role automatically inherits privileges of roles it is a + member of + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolcreaterole</structfield> <type>bool</type> + </para> + <para> + Role can create more roles + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolcreatedb</structfield> <type>bool</type> + </para> + <para> + Role can create databases + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolcanlogin</structfield> <type>bool</type> + </para> + <para> + Role can log in. That is, this role can be given as the initial + session authorization identifier. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolreplication</structfield> <type>bool</type> + </para> + <para> + Role is a replication role. A replication role can initiate replication + connections and create and drop replication slots. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolbypassrls</structfield> <type>bool</type> + </para> + <para> + Role bypasses every row-level security policy, see + <xref linkend="ddl-rowsecurity"/> for more information. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolconnlimit</structfield> <type>int4</type> + </para> + <para> + For roles that can log in, this sets maximum number of concurrent + connections this role can make. -1 means no limit. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolpassword</structfield> <type>text</type> + </para> + <para> + Password (possibly encrypted); null if none. The format depends + on the form of encryption used. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rolvaliduntil</structfield> <type>timestamptz</type> + </para> + <para> + Password expiry time (only used for password authentication); + null if no expiration + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + For an MD5 encrypted password, <structfield>rolpassword</structfield> + column will begin with the string <literal>md5</literal> followed by a + 32-character hexadecimal MD5 hash. The MD5 hash will be of the user's + password concatenated to their user name. For example, if user + <literal>joe</literal> has password <literal>xyzzy</literal>, <productname>PostgreSQL</productname> + will store the md5 hash of <literal>xyzzyjoe</literal>. + </para> + + <para> + If the password is encrypted with SCRAM-SHA-256, it has the format: +<synopsis> +SCRAM-SHA-256$<replaceable><iteration count></replaceable>:<replaceable><salt></replaceable>$<replaceable><StoredKey></replaceable>:<replaceable><ServerKey></replaceable> +</synopsis> + where <replaceable>salt</replaceable>, <replaceable>StoredKey</replaceable> and + <replaceable>ServerKey</replaceable> are in Base64 encoded format. This format is + the same as that specified by <ulink url="https://tools.ietf.org/html/rfc5803">RFC 5803</ulink>. + </para> + + <para> + A password that does not follow either of those formats is assumed to be + unencrypted. + </para> + </sect1> + + + <sect1 id="catalog-pg-auth-members"> + <title><structname>pg_auth_members</structname></title> + + <indexterm zone="catalog-pg-auth-members"> + <primary>pg_auth_members</primary> + </indexterm> + + <para> + The catalog <structname>pg_auth_members</structname> shows the membership + relations between roles. Any non-circular set of relationships is allowed. + </para> + + <para> + Because user identities are cluster-wide, + <structname>pg_auth_members</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_auth_members</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_auth_members</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>roleid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + ID of a role that has a member + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>member</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + ID of a role that is a member of <structfield>roleid</structfield> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>grantor</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + ID of the role that granted this membership + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>admin_option</structfield> <type>bool</type> + </para> + <para> + True if <structfield>member</structfield> can grant membership in + <structfield>roleid</structfield> to others + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-cast"> + <title><structname>pg_cast</structname></title> + + <indexterm zone="catalog-pg-cast"> + <primary>pg_cast</primary> + </indexterm> + + <para> + The catalog <structname>pg_cast</structname> stores data type conversion + paths, both built-in and user-defined. + </para> + + <para> + It should be noted that <structname>pg_cast</structname> does not represent + every type conversion that the system knows how to perform; only those that + cannot be deduced from some generic rule. For example, casting between a + domain and its base type is not explicitly represented in + <structname>pg_cast</structname>. Another important exception is that + <quote>automatic I/O conversion casts</quote>, those performed using a data + type's own I/O functions to convert to or from <type>text</type> or other + string types, are not explicitly represented in + <structname>pg_cast</structname>. + </para> + + <table> + <title><structname>pg_cast</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>castsource</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the source data type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>casttarget</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the target data type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>castfunc</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the function to use to perform this cast. Zero is + stored if the cast method doesn't require a function. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>castcontext</structfield> <type>char</type> + </para> + <para> + Indicates what contexts the cast can be invoked in. + <literal>e</literal> means only as an explicit cast (using + <literal>CAST</literal> or <literal>::</literal> syntax). + <literal>a</literal> means implicitly in assignment + to a target column, as well as explicitly. + <literal>i</literal> means implicitly in expressions, as well as the + other cases. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>castmethod</structfield> <type>char</type> + </para> + <para> + Indicates how the cast is performed. + <literal>f</literal> means that the function specified in the <structfield>castfunc</structfield> field is used. + <literal>i</literal> means that the input/output functions are used. + <literal>b</literal> means that the types are binary-coercible, thus no conversion is required. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + The cast functions listed in <structname>pg_cast</structname> must + always take the cast source type as their first argument type, and + return the cast destination type as their result type. A cast + function can have up to three arguments. The second argument, + if present, must be type <type>integer</type>; it receives the type + modifier associated with the destination type, or -1 + if there is none. The third argument, + if present, must be type <type>boolean</type>; it receives <literal>true</literal> + if the cast is an explicit cast, <literal>false</literal> otherwise. + </para> + + <para> + It is legitimate to create a <structname>pg_cast</structname> entry + in which the source and target types are the same, if the associated + function takes more than one argument. Such entries represent + <quote>length coercion functions</quote> that coerce values of the type + to be legal for a particular type modifier value. + </para> + + <para> + When a <structname>pg_cast</structname> entry has different source and + target types and a function that takes more than one argument, it + represents converting from one type to another and applying a length + coercion in a single step. When no such entry is available, coercion + to a type that uses a type modifier involves two steps, one to + convert between data types and a second to apply the modifier. + </para> + </sect1> + + <sect1 id="catalog-pg-class"> + <title><structname>pg_class</structname></title> + + <indexterm zone="catalog-pg-class"> + <primary>pg_class</primary> + </indexterm> + + <para> + The catalog <structname>pg_class</structname> catalogs tables and most + everything else that has columns or is otherwise similar to a + table. This includes indexes (but see also <link + linkend="catalog-pg-index"><structname>pg_index</structname></link>), + sequences (but see also <link + linkend="catalog-pg-sequence"><structname>pg_sequence</structname></link>), + views, materialized views, composite types, and TOAST tables; + see <structfield>relkind</structfield>. + Below, when we mean all of these kinds of objects we speak of + <quote>relations</quote>. Not all columns are meaningful for all relation + types. + </para> + + <table> + <title><structname>pg_class</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relname</structfield> <type>name</type> + </para> + <para> + Name of the table, index, view, etc. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this relation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>reltype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the data type that corresponds to this table's row type, + if any; zero for indexes, sequences, and toast tables, which have + no <structname>pg_type</structname> entry + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>reloftype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For typed tables, the OID of the underlying composite type; + zero for all other relations + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the relation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relam</structfield> <type>oid</type> + (references <link linkend="catalog-pg-am"><structname>pg_am</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If this is a table or an index, the access method used (heap, + B-tree, hash, etc.); otherwise zero (zero occurs for sequences, + as well as relations without storage, such as views) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relfilenode</structfield> <type>oid</type> + </para> + <para> + Name of the on-disk file of this relation; zero means this + is a <quote>mapped</quote> relation whose disk file name is determined + by low-level state + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>reltablespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-tablespace"><structname>pg_tablespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The tablespace in which this relation is stored. If zero, + the database's default tablespace is implied. (Not meaningful + if the relation has no on-disk file.) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relpages</structfield> <type>int4</type> + </para> + <para> + Size of the on-disk representation of this table in pages (of size + <symbol>BLCKSZ</symbol>). This is only an estimate used by the + planner. It is updated by <link linkend="sql-vacuum"><command>VACUUM</command></link>, + <link linkend="sql-analyze"><command>ANALYZE</command></link>, and a few DDL commands such as + <link linkend="sql-createindex"><command>CREATE INDEX</command></link>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>reltuples</structfield> <type>float4</type> + </para> + <para> + Number of live rows in the table. This is only an estimate used by + the planner. It is updated by <link linkend="sql-vacuum"><command>VACUUM</command></link>, + <link linkend="sql-analyze"><command>ANALYZE</command></link>, and a few DDL commands such as + <link linkend="sql-createindex"><command>CREATE INDEX</command></link>. + If the table has never yet been vacuumed or + analyzed, <structfield>reltuples</structfield> + contains <literal>-1</literal> indicating that the row count is + unknown. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relallvisible</structfield> <type>int4</type> + </para> + <para> + Number of pages that are marked all-visible in the table's + visibility map. This is only an estimate used by the + planner. It is updated by <link linkend="sql-vacuum"><command>VACUUM</command></link>, + <link linkend="sql-analyze"><command>ANALYZE</command></link>, and a few DDL commands such as + <link linkend="sql-createindex"><command>CREATE INDEX</command></link>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>reltoastrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the TOAST table associated with this table, zero if none. The + TOAST table stores large attributes <quote>out of line</quote> in a + secondary table. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relhasindex</structfield> <type>bool</type> + </para> + <para> + True if this is a table and it has (or recently had) any indexes + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relisshared</structfield> <type>bool</type> + </para> + <para> + True if this table is shared across all databases in the cluster. Only + certain system catalogs (such as <link linkend="catalog-pg-database"><structname>pg_database</structname></link>) + are shared. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relpersistence</structfield> <type>char</type> + </para> + <para> + <literal>p</literal> = permanent table/sequence, <literal>u</literal> = unlogged table/sequence, + <literal>t</literal> = temporary table/sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relkind</structfield> <type>char</type> + </para> + <para> + <literal>r</literal> = ordinary table, + <literal>i</literal> = index, + <literal>S</literal> = sequence, + <literal>t</literal> = TOAST table, + <literal>v</literal> = view, + <literal>m</literal> = materialized view, + <literal>c</literal> = composite type, + <literal>f</literal> = foreign table, + <literal>p</literal> = partitioned table, + <literal>I</literal> = partitioned index + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relnatts</structfield> <type>int2</type> + </para> + <para> + Number of user columns in the relation (system columns not + counted). There must be this many corresponding entries in + <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>. See also + <structname>pg_attribute</structname>.<structfield>attnum</structfield>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relchecks</structfield> <type>int2</type> + </para> + <para> + Number of <literal>CHECK</literal> constraints on the table; see + <link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link> catalog + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relhasrules</structfield> <type>bool</type> + </para> + <para> + True if table has (or once had) rules; see + <link linkend="catalog-pg-rewrite"><structname>pg_rewrite</structname></link> catalog + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relhastriggers</structfield> <type>bool</type> + </para> + <para> + True if table has (or once had) triggers; see + <link linkend="catalog-pg-trigger"><structname>pg_trigger</structname></link> catalog + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relhassubclass</structfield> <type>bool</type> + </para> + <para> + True if table or index has (or once had) any inheritance children or partitions + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relrowsecurity</structfield> <type>bool</type> + </para> + <para> + True if table has row-level security enabled; see + <link linkend="catalog-pg-policy"><structname>pg_policy</structname></link> catalog + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relforcerowsecurity</structfield> <type>bool</type> + </para> + <para> + True if row-level security (when enabled) will also apply to table owner; see + <link linkend="catalog-pg-policy"><structname>pg_policy</structname></link> catalog + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relispopulated</structfield> <type>bool</type> + </para> + <para> + True if relation is populated (this is true for all + relations other than some materialized views) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relreplident</structfield> <type>char</type> + </para> + <para> + Columns used to form <quote>replica identity</quote> for rows: + <literal>d</literal> = default (primary key, if any), + <literal>n</literal> = nothing, + <literal>f</literal> = all columns, + <literal>i</literal> = index with + <structfield>indisreplident</structfield> set (same as nothing if the + index used has been dropped) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relispartition</structfield> <type>bool</type> + </para> + <para> + True if table or index is a partition + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relrewrite</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For new relations being written during a DDL operation that requires a + table rewrite, this contains the OID of the original relation; + otherwise zero. That state is only visible internally; this field should + never contain anything other than zero for a user-visible relation. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relfrozenxid</structfield> <type>xid</type> + </para> + <para> + All transaction IDs before this one have been replaced with a permanent + (<quote>frozen</quote>) transaction ID in this table. This is used to track + whether the table needs to be vacuumed in order to prevent transaction + ID wraparound or to allow <literal>pg_xact</literal> to be shrunk. Zero + (<symbol>InvalidTransactionId</symbol>) if the relation is not a table. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relminmxid</structfield> <type>xid</type> + </para> + <para> + All multixact IDs before this one have been replaced by a + transaction ID in this table. This is used to track + whether the table needs to be vacuumed in order to prevent multixact ID + wraparound or to allow <literal>pg_multixact</literal> to be shrunk. Zero + (<symbol>InvalidMultiXactId</symbol>) if the relation is not a table. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>reloptions</structfield> <type>text[]</type> + </para> + <para> + Access-method-specific options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>relpartbound</structfield> <type>pg_node_tree</type> + </para> + <para> + If table is a partition (see <structfield>relispartition</structfield>), + internal representation of the partition bound + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + Several of the Boolean flags in <structname>pg_class</structname> are maintained + lazily: they are guaranteed to be true if that's the correct state, but + may not be reset to false immediately when the condition is no longer + true. For example, <structfield>relhasindex</structfield> is set by + <link linkend="sql-createindex"><command>CREATE INDEX</command></link>, but it is never cleared by + <link linkend="sql-dropindex"><command>DROP INDEX</command></link>. Instead, <link linkend="sql-vacuum"><command>VACUUM</command></link> clears + <structfield>relhasindex</structfield> if it finds the table has no indexes. This + arrangement avoids race conditions and improves concurrency. + </para> + </sect1> + + <sect1 id="catalog-pg-collation"> + <title><structname>pg_collation</structname></title> + + <indexterm zone="catalog-pg-collation"> + <primary>pg_collation</primary> + </indexterm> + + <para> + The catalog <structname>pg_collation</structname> describes the + available collations, which are essentially mappings from an SQL + name to operating system locale categories. + See <xref linkend="collation"/> for more information. + </para> + + <table> + <title><structname>pg_collation</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collname</structfield> <type>name</type> + </para> + <para> + Collation name (unique per namespace and encoding) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this collation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the collation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collprovider</structfield> <type>char</type> + </para> + <para> + Provider of the collation: <literal>d</literal> = database + default, <literal>c</literal> = libc, <literal>i</literal> = icu + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collisdeterministic</structfield> <type>bool</type> + </para> + <para> + Is the collation deterministic? + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collencoding</structfield> <type>int4</type> + </para> + <para> + Encoding in which the collation is applicable, or -1 if it + works for any encoding + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collcollate</structfield> <type>text</type> + </para> + <para> + <symbol>LC_COLLATE</symbol> for this collation object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collctype</structfield> <type>text</type> + </para> + <para> + <symbol>LC_CTYPE</symbol> for this collation object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>colliculocale</structfield> <type>text</type> + </para> + <para> + ICU locale ID for this collation object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>collversion</structfield> <type>text</type> + </para> + <para> + Provider-specific version of the collation. This is recorded when the + collation is created and then checked when it is used, to detect + changes in the collation definition that could lead to data corruption. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + Note that the unique key on this catalog is (<structfield>collname</structfield>, + <structfield>collencoding</structfield>, <structfield>collnamespace</structfield>) not just + (<structfield>collname</structfield>, <structfield>collnamespace</structfield>). + <productname>PostgreSQL</productname> generally ignores all + collations that do not have <structfield>collencoding</structfield> equal to + either the current database's encoding or -1, and creation of new entries + with the same name as an entry with <structfield>collencoding</structfield> = -1 + is forbidden. Therefore it is sufficient to use a qualified SQL name + (<replaceable>schema</replaceable>.<replaceable>name</replaceable>) to identify a collation, + even though this is not unique according to the catalog definition. + The reason for defining the catalog this way is that + <application>initdb</application> fills it in at cluster initialization time with + entries for all locales available on the system, so it must be able to + hold entries for all encodings that might ever be used in the cluster. + </para> + + <para> + In the <literal>template0</literal> database, it could be useful to create + collations whose encoding does not match the database encoding, + since they could match the encodings of databases later cloned from + <literal>template0</literal>. This would currently have to be done manually. + </para> + </sect1> + + <sect1 id="catalog-pg-constraint"> + <title><structname>pg_constraint</structname></title> + + <indexterm zone="catalog-pg-constraint"> + <primary>pg_constraint</primary> + </indexterm> + + <para> + The catalog <structname>pg_constraint</structname> stores check, primary + key, unique, foreign key, and exclusion constraints on tables. + (Column constraints are not treated specially. Every column constraint is + equivalent to some table constraint.) + Not-null constraints are represented in the + <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link> + catalog, not here. + </para> + + <para> + User-defined constraint triggers (created with <link linkend="sql-createtrigger"> + <command>CREATE CONSTRAINT TRIGGER</command></link>) also give rise to an entry in this table. + </para> + + <para> + Check constraints on domains are stored here, too. + </para> + + <table> + <title><structname>pg_constraint</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conname</structfield> <type>name</type> + </para> + <para> + Constraint name (not necessarily unique!) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>connamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this constraint + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>contype</structfield> <type>char</type> + </para> + <para> + <literal>c</literal> = check constraint, + <literal>f</literal> = foreign key constraint, + <literal>p</literal> = primary key constraint, + <literal>u</literal> = unique constraint, + <literal>t</literal> = constraint trigger, + <literal>x</literal> = exclusion constraint + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>condeferrable</structfield> <type>bool</type> + </para> + <para> + Is the constraint deferrable? + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>condeferred</structfield> <type>bool</type> + </para> + <para> + Is the constraint deferred by default? + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>convalidated</structfield> <type>bool</type> + </para> + <para> + Has the constraint been validated? + Currently, can be false only for foreign keys and CHECK constraints + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table this constraint is on; zero if not a table constraint + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>contypid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The domain this constraint is on; zero if not a domain constraint + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conindid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The index supporting this constraint, if it's a unique, primary + key, foreign key, or exclusion constraint; else zero + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conparentid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The corresponding constraint of the parent partitioned table, + if this is a constraint on a partition; else zero + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>confrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If a foreign key, the referenced table; else zero + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>confupdtype</structfield> <type>char</type> + </para> + <para> + Foreign key update action code: + <literal>a</literal> = no action, + <literal>r</literal> = restrict, + <literal>c</literal> = cascade, + <literal>n</literal> = set null, + <literal>d</literal> = set default + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>confdeltype</structfield> <type>char</type> + </para> + <para> + Foreign key deletion action code: + <literal>a</literal> = no action, + <literal>r</literal> = restrict, + <literal>c</literal> = cascade, + <literal>n</literal> = set null, + <literal>d</literal> = set default + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>confmatchtype</structfield> <type>char</type> + </para> + <para> + Foreign key match type: + <literal>f</literal> = full, + <literal>p</literal> = partial, + <literal>s</literal> = simple + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conislocal</structfield> <type>bool</type> + </para> + <para> + This constraint is defined locally for the relation. Note that a + constraint can be locally defined and inherited simultaneously. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>coninhcount</structfield> <type>int4</type> + </para> + <para> + The number of direct inheritance ancestors this constraint has. + A constraint with + a nonzero number of ancestors cannot be dropped nor renamed. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>connoinherit</structfield> <type>bool</type> + </para> + <para> + This constraint is defined locally for the relation. It is a + non-inheritable constraint. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conkey</structfield> <type>int2[]</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + If a table constraint (including foreign keys, but not constraint + triggers), list of the constrained columns + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>confkey</structfield> <type>int2[]</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + If a foreign key, list of the referenced columns + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conpfeqop</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If a foreign key, list of the equality operators for PK = FK comparisons + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conppeqop</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If a foreign key, list of the equality operators for PK = PK comparisons + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conffeqop</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If a foreign key, list of the equality operators for FK = FK comparisons + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>confdelsetcols</structfield> <type>int2[]</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + If a foreign key with a <literal>SET NULL</literal> or <literal>SET + DEFAULT</literal> delete action, the columns that will be updated. + If null, all of the referencing columns will be updated. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conexclop</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If an exclusion constraint, list of the per-column exclusion operators + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conbin</structfield> <type>pg_node_tree</type> + </para> + <para> + If a check constraint, an internal representation of the + expression. (It's recommended to use + <function>pg_get_constraintdef()</function> to extract the definition of + a check constraint.) + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + In the case of an exclusion constraint, <structfield>conkey</structfield> + is only useful for constraint elements that are simple column references. + For other cases, a zero appears in <structfield>conkey</structfield> + and the associated index must be consulted to discover the expression + that is constrained. (<structfield>conkey</structfield> thus has the + same contents as <link linkend="catalog-pg-index"><structname>pg_index</structname></link>.<structfield>indkey</structfield> for the + index.) + </para> + + <note> + <para> + <literal>pg_class.relchecks</literal> needs to agree with the + number of check-constraint entries found in this table for each + relation. + </para> + </note> + </sect1> + + + <sect1 id="catalog-pg-conversion"> + <title><structname>pg_conversion</structname></title> + + <indexterm zone="catalog-pg-conversion"> + <primary>pg_conversion</primary> + </indexterm> + + <para> + The catalog <structname>pg_conversion</structname> describes + encoding conversion functions. See <xref linkend="sql-createconversion"/> + for more information. + </para> + + <table> + <title><structname>pg_conversion</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conname</structfield> <type>name</type> + </para> + <para> + Conversion name (unique within a namespace) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>connamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this conversion + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the conversion + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conforencoding</structfield> <type>int4</type> + </para> + <para> + Source encoding ID (<link linkend="pg-encoding-to-char"><function>pg_encoding_to_char()</function></link> + can translate this number to the encoding name) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>contoencoding</structfield> <type>int4</type> + </para> + <para> + Destination encoding ID (<link linkend="pg-encoding-to-char"><function>pg_encoding_to_char()</function></link> + can translate this number to the encoding name) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>conproc</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Conversion function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>condefault</structfield> <type>bool</type> + </para> + <para> + True if this is the default conversion + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + <sect1 id="catalog-pg-database"> + <title><structname>pg_database</structname></title> + + <indexterm zone="catalog-pg-database"> + <primary>pg_database</primary> + </indexterm> + + <para> + The catalog <structname>pg_database</structname> stores information about + the available databases. Databases are created with the <link + linkend="sql-createdatabase"><command>CREATE DATABASE</command></link> command. + Consult <xref linkend="managing-databases"/> for details about the meaning + of some of the parameters. + </para> + + <para> + Unlike most system catalogs, <structname>pg_database</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_database</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_database</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datname</structfield> <type>name</type> + </para> + <para> + Database name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datdba</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the database, usually the user who created it + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>encoding</structfield> <type>int4</type> + </para> + <para> + Character encoding for this database + (<link linkend="pg-encoding-to-char"><function>pg_encoding_to_char()</function></link> can translate + this number to the encoding name) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datlocprovider</structfield> <type>char</type> + </para> + <para> + Locale provider for this database: <literal>c</literal> = libc, + <literal>i</literal> = icu + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datistemplate</structfield> <type>bool</type> + </para> + <para> + If true, then this database can be cloned by + any user with <literal>CREATEDB</literal> privileges; + if false, then only superusers or the owner of + the database can clone it. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datallowconn</structfield> <type>bool</type> + </para> + <para> + If false then no one can connect to this database. This is + used to protect the <literal>template0</literal> database from being altered. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datconnlimit</structfield> <type>int4</type> + </para> + <para> + Sets maximum number of concurrent connections that can be made + to this database. -1 means no limit, -2 indicates the database is + invalid. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datfrozenxid</structfield> <type>xid</type> + </para> + <para> + All transaction IDs before this one have been replaced with a permanent + (<quote>frozen</quote>) transaction ID in this database. This is used to + track whether the database needs to be vacuumed in order to prevent + transaction ID wraparound or to allow <literal>pg_xact</literal> to be shrunk. + It is the minimum of the per-table + <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relfrozenxid</structfield> values. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datminmxid</structfield> <type>xid</type> + </para> + <para> + All multixact IDs before this one have been replaced with a + transaction ID in this database. This is used to + track whether the database needs to be vacuumed in order to prevent + multixact ID wraparound or to allow <literal>pg_multixact</literal> to be shrunk. + It is the minimum of the per-table + <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relminmxid</structfield> values. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>dattablespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-tablespace"><structname>pg_tablespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The default tablespace for the database. + Within this database, all tables for which + <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>reltablespace</structfield> is zero + will be stored in this tablespace; in particular, all the non-shared + system catalogs will be there. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datcollate</structfield> <type>text</type> + </para> + <para> + LC_COLLATE for this database + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datctype</structfield> <type>text</type> + </para> + <para> + LC_CTYPE for this database + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>daticulocale</structfield> <type>text</type> + </para> + <para> + ICU locale ID for this database + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datcollversion</structfield> <type>text</type> + </para> + <para> + Provider-specific version of the collation. This is recorded when the + database is created and then checked when it is used, to detect + changes in the collation definition that could lead to data corruption. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>datacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-db-role-setting"> + <title><structname>pg_db_role_setting</structname></title> + + <indexterm zone="catalog-pg-db-role-setting"> + <primary>pg_db_role_setting</primary> + </indexterm> + + <para> + The catalog <structname>pg_db_role_setting</structname> records the default + values that have been set for run-time configuration variables, + for each role and database combination. + </para> + + <para> + Unlike most system catalogs, <structname>pg_db_role_setting</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_db_role_setting</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_db_role_setting</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>setdatabase</structfield> <type>oid</type> + (references <link linkend="catalog-pg-database"><structname>pg_database</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the database the setting is applicable to, or zero if not database-specific + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>setrole</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the role the setting is applicable to, or zero if not role-specific + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>setconfig</structfield> <type>text[]</type> + </para> + <para> + Defaults for run-time configuration variables + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-default-acl"> + <title><structname>pg_default_acl</structname></title> + + <indexterm zone="catalog-pg-default-acl"> + <primary>pg_default_acl</primary> + </indexterm> + + <para> + The catalog <structname>pg_default_acl</structname> stores initial + privileges to be assigned to newly created objects. + </para> + + <table> + <title><structname>pg_default_acl</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>defaclrole</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the role associated with this entry + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>defaclnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace associated with this entry, + or zero if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>defaclobjtype</structfield> <type>char</type> + </para> + <para> + Type of object this entry is for: + <literal>r</literal> = relation (table, view), + <literal>S</literal> = sequence, + <literal>f</literal> = function, + <literal>T</literal> = type, + <literal>n</literal> = schema + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>defaclacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges that this type of object should have on creation + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + A <structname>pg_default_acl</structname> entry shows the initial privileges to + be assigned to an object belonging to the indicated user. There are + currently two types of entry: <quote>global</quote> entries with + <structfield>defaclnamespace</structfield> = zero, and <quote>per-schema</quote> entries + that reference a particular schema. If a global entry is present then + it <emphasis>overrides</emphasis> the normal hard-wired default privileges + for the object type. A per-schema entry, if present, represents privileges + to be <emphasis>added to</emphasis> the global or hard-wired default privileges. + </para> + + <para> + Note that when an ACL entry in another catalog is null, it is taken + to represent the hard-wired default privileges for its object, + <emphasis>not</emphasis> whatever might be in <structname>pg_default_acl</structname> + at the moment. <structname>pg_default_acl</structname> is only consulted during + object creation. + </para> + + </sect1> + + + <sect1 id="catalog-pg-depend"> + <title><structname>pg_depend</structname></title> + + <indexterm zone="catalog-pg-depend"> + <primary>pg_depend</primary> + </indexterm> + + <para> + The catalog <structname>pg_depend</structname> records the dependency + relationships between database objects. This information allows + <command>DROP</command> commands to find which other objects must be dropped + by <command>DROP CASCADE</command> or prevent dropping in the <command>DROP + RESTRICT</command> case. + </para> + + <para> + See also <link linkend="catalog-pg-shdepend"><structname>pg_shdepend</structname></link>, + which performs a similar function for dependencies involving objects + that are shared across a database cluster. + </para> + + <table> + <title><structname>pg_depend</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>classid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog the dependent object is in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the specific dependent object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objsubid</structfield> <type>int4</type> + </para> + <para> + For a table column, this is the column number (the + <structfield>objid</structfield> and <structfield>classid</structfield> refer to the + table itself). For all other object types, this column is + zero. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>refclassid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog the referenced object is in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>refobjid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the specific referenced object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>refobjsubid</structfield> <type>int4</type> + </para> + <para> + For a table column, this is the column number (the + <structfield>refobjid</structfield> and <structfield>refclassid</structfield> refer + to the table itself). For all other object types, this column + is zero. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>deptype</structfield> <type>char</type> + </para> + <para> + A code defining the specific semantics of this dependency relationship; see text + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + In all cases, a <structname>pg_depend</structname> entry indicates that the + referenced object cannot be dropped without also dropping the dependent + object. However, there are several subflavors identified by + <structfield>deptype</structfield>: + + <variablelist> + <varlistentry> + <term><symbol>DEPENDENCY_NORMAL</symbol> (<literal>n</literal>)</term> + <listitem> + <para> + A normal relationship between separately-created objects. The + dependent object can be dropped without affecting the + referenced object. The referenced object can only be dropped + by specifying <literal>CASCADE</literal>, in which case the dependent + object is dropped, too. Example: a table column has a normal + dependency on its data type. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>DEPENDENCY_AUTO</symbol> (<literal>a</literal>)</term> + <listitem> + <para> + The dependent object can be dropped separately from the + referenced object, and should be automatically dropped + (regardless of <literal>RESTRICT</literal> or <literal>CASCADE</literal> + mode) if the referenced object is dropped. Example: a named + constraint on a table is made auto-dependent on the table, so + that it will go away if the table is dropped. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>DEPENDENCY_INTERNAL</symbol> (<literal>i</literal>)</term> + <listitem> + <para> + The dependent object was created as part of creation of the + referenced object, and is really just a part of its internal + implementation. A direct <command>DROP</command> of the dependent + object will be disallowed outright (we'll tell the user to issue + a <command>DROP</command> against the referenced object, instead). + A <command>DROP</command> of the referenced object will result in + automatically dropping the dependent object + whether <literal>CASCADE</literal> is specified or not. If the + dependent object has to be dropped due to a dependency on some other + object being removed, its drop is converted to a drop of the referenced + object, so that <literal>NORMAL</literal> and <literal>AUTO</literal> + dependencies of the dependent object behave much like they were + dependencies of the referenced object. + Example: a view's <literal>ON SELECT</literal> rule is made + internally dependent on the view, preventing it from being dropped + while the view remains. Dependencies of the rule (such as tables it + refers to) act as if they were dependencies of the view. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>DEPENDENCY_PARTITION_PRI</symbol> (<literal>P</literal>)</term> + <term><symbol>DEPENDENCY_PARTITION_SEC</symbol> (<literal>S</literal>)</term> + <listitem> + <para> + The dependent object was created as part of creation of the + referenced object, and is really just a part of its internal + implementation; however, unlike <literal>INTERNAL</literal>, + there is more than one such referenced object. The dependent object + must not be dropped unless at least one of these referenced objects + is dropped; if any one is, the dependent object should be dropped + whether or not <literal>CASCADE</literal> is specified. Also + unlike <literal>INTERNAL</literal>, a drop of some other object + that the dependent object depends on does not result in automatic + deletion of any partition-referenced object. Hence, if the drop + does not cascade to at least one of these objects via some other + path, it will be refused. (In most cases, the dependent object + shares all its non-partition dependencies with at least one + partition-referenced object, so that this restriction does not + result in blocking any cascaded delete.) + Primary and secondary partition dependencies behave identically + except that the primary dependency is preferred for use in error + messages; hence, a partition-dependent object should have one + primary partition dependency and one or more secondary partition + dependencies. + Note that partition dependencies are made in addition to, not + instead of, any dependencies the object would normally have. This + simplifies <command>ATTACH/DETACH PARTITION</command> operations: + the partition dependencies need only be added or removed. + Example: a child partitioned index is made partition-dependent + on both the partition table it is on and the parent partitioned + index, so that it goes away if either of those is dropped, but + not otherwise. The dependency on the parent index is primary, + so that if the user tries to drop the child partitioned index, + the error message will suggest dropping the parent index instead + (not the table). + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>DEPENDENCY_EXTENSION</symbol> (<literal>e</literal>)</term> + <listitem> + <para> + The dependent object is a member of the <firstterm>extension</firstterm> that is + the referenced object (see + <link linkend="catalog-pg-extension"><structname>pg_extension</structname></link>). + The dependent object can be dropped only via + <link linkend="sql-dropextension"><command>DROP EXTENSION</command></link> on the referenced object. + Functionally this dependency type acts the same as + an <literal>INTERNAL</literal> dependency, but it's kept separate for + clarity and to simplify <application>pg_dump</application>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>DEPENDENCY_AUTO_EXTENSION</symbol> (<literal>x</literal>)</term> + <listitem> + <para> + The dependent object is not a member of the extension that is the + referenced object (and so it should not be ignored + by <application>pg_dump</application>), but it cannot function + without the extension and should be auto-dropped if the extension is. + The dependent object may be dropped on its own as well. + Functionally this dependency type acts the same as + an <literal>AUTO</literal> dependency, but it's kept separate for + clarity and to simplify <application>pg_dump</application>. + </para> + </listitem> + </varlistentry> + </variablelist> + + Other dependency flavors might be needed in future. + </para> + + <para> + Note that it's quite possible for two objects to be linked by more than + one <structname>pg_depend</structname> entry. For example, a child + partitioned index would have both a partition-type dependency on its + associated partition table, and an auto dependency on each column of + that table that it indexes. This sort of situation expresses the union + of multiple dependency semantics. A dependent object can be dropped + without <literal>CASCADE</literal> if any of its dependencies satisfies + its condition for automatic dropping. Conversely, all the + dependencies' restrictions about which objects must be dropped together + must be satisfied. + </para> + + <para> + Most objects created during <application>initdb</application> are + considered <quote>pinned</quote>, which means that the system itself + depends on them. Therefore, they are never allowed to be dropped. + Also, knowing that pinned objects will not be dropped, the dependency + mechanism doesn't bother to make <structname>pg_depend</structname> + entries showing dependencies on them. Thus, for example, a table + column of type <type>numeric</type> notionally has + a <literal>NORMAL</literal> dependency on the <type>numeric</type> + data type, but no such entry actually appears + in <structname>pg_depend</structname>. + </para> + + </sect1> + + + <sect1 id="catalog-pg-description"> + <title><structname>pg_description</structname></title> + + <indexterm zone="catalog-pg-description"> + <primary>pg_description</primary> + </indexterm> + + <para> + The catalog <structname>pg_description</structname> stores optional descriptions + (comments) for each database object. Descriptions can be manipulated + with the <link linkend="sql-comment"><command>COMMENT</command></link> command and viewed with + <application>psql</application>'s <literal>\d</literal> commands. + Descriptions of many built-in system objects are provided in the initial + contents of <structname>pg_description</structname>. + </para> + + <para> + See also <link linkend="catalog-pg-shdescription"><structname>pg_shdescription</structname></link>, + which performs a similar function for descriptions involving objects that + are shared across a database cluster. + </para> + + <table> + <title><structname>pg_description</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>objoid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the object this description pertains to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>classoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog this object appears in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objsubid</structfield> <type>int4</type> + </para> + <para> + For a comment on a table column, this is the column number (the + <structfield>objoid</structfield> and <structfield>classoid</structfield> refer to + the table itself). For all other object types, this column is + zero. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>description</structfield> <type>text</type> + </para> + <para> + Arbitrary text that serves as the description of this object + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-enum"> + <title><structname>pg_enum</structname></title> + + <indexterm zone="catalog-pg-enum"> + <primary>pg_enum</primary> + </indexterm> + + <para> + The <structname>pg_enum</structname> catalog contains entries + showing the values and labels for each enum type. The + internal representation of a given enum value is actually the OID + of its associated row in <structname>pg_enum</structname>. + </para> + + <table> + <title><structname>pg_enum</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>enumtypid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-type"><structname>pg_type</structname></link> entry owning this enum value + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>enumsortorder</structfield> <type>float4</type> + </para> + <para> + The sort position of this enum value within its enum type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>enumlabel</structfield> <type>name</type> + </para> + <para> + The textual label for this enum value + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + The OIDs for <structname>pg_enum</structname> rows follow a special + rule: even-numbered OIDs are guaranteed to be ordered in the same way + as the sort ordering of their enum type. That is, if two even OIDs + belong to the same enum type, the smaller OID must have the smaller + <structfield>enumsortorder</structfield> value. Odd-numbered OID values + need bear no relationship to the sort order. This rule allows the + enum comparison routines to avoid catalog lookups in many common cases. + The routines that create and alter enum types attempt to assign even + OIDs to enum values whenever possible. + </para> + + <para> + When an enum type is created, its members are assigned sort-order + positions 1..<replaceable>n</replaceable>. But members added later might be given + negative or fractional values of <structfield>enumsortorder</structfield>. + The only requirement on these values is that they be correctly + ordered and unique within each enum type. + </para> + </sect1> + + + <sect1 id="catalog-pg-event-trigger"> + <title><structname>pg_event_trigger</structname></title> + + <indexterm zone="catalog-pg-event-trigger"> + <primary>pg_event_trigger</primary> + </indexterm> + + <para> + The catalog <structname>pg_event_trigger</structname> stores event triggers. + See <xref linkend="event-triggers"/> for more information. + </para> + + <table> + <title><structname>pg_event_trigger</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>evtname</structfield> <type>name</type> + </para> + <para> + Trigger name (must be unique) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>evtevent</structfield> <type>name</type> + </para> + <para> + Identifies the event for which this trigger fires + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>evtowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the event trigger + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>evtfoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The function to be called + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>evtenabled</structfield> <type>char</type> + </para> + <para> + Controls in which <xref linkend="guc-session-replication-role"/> modes + the event trigger fires. + <literal>O</literal> = trigger fires in <quote>origin</quote> and <quote>local</quote> modes, + <literal>D</literal> = trigger is disabled, + <literal>R</literal> = trigger fires in <quote>replica</quote> mode, + <literal>A</literal> = trigger fires always. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>evttags</structfield> <type>text[]</type> + </para> + <para> + Command tags for which this trigger will fire. If NULL, the firing + of this trigger is not restricted on the basis of the command tag. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-extension"> + <title><structname>pg_extension</structname></title> + + <indexterm zone="catalog-pg-extension"> + <primary>pg_extension</primary> + </indexterm> + + <para> + The catalog <structname>pg_extension</structname> stores information + about the installed extensions. See <xref linkend="extend-extensions"/> + for details about extensions. + </para> + + <table> + <title><structname>pg_extension</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extname</structfield> <type>name</type> + </para> + <para> + Name of the extension + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the extension + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Schema containing the extension's exported objects + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extrelocatable</structfield> <type>bool</type> + </para> + <para> + True if extension can be relocated to another schema + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extversion</structfield> <type>text</type> + </para> + <para> + Version name for the extension + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extconfig</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Array of <type>regclass</type> OIDs for the extension's configuration + table(s), or <literal>NULL</literal> if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>extcondition</structfield> <type>text[]</type> + </para> + <para> + Array of <literal>WHERE</literal>-clause filter conditions for the + extension's configuration table(s), or <literal>NULL</literal> if none + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + Note that unlike most catalogs with a <quote>namespace</quote> column, + <structfield>extnamespace</structfield> is not meant to imply + that the extension belongs to that schema. Extension names are never + schema-qualified. Rather, <structfield>extnamespace</structfield> + indicates the schema that contains most or all of the extension's + objects. If <structfield>extrelocatable</structfield> is true, then + this schema must in fact contain all schema-qualifiable objects + belonging to the extension. + </para> + </sect1> + + + <sect1 id="catalog-pg-foreign-data-wrapper"> + <title><structname>pg_foreign_data_wrapper</structname></title> + + <indexterm zone="catalog-pg-foreign-data-wrapper"> + <primary>pg_foreign_data_wrapper</primary> + </indexterm> + + <para> + The catalog <structname>pg_foreign_data_wrapper</structname> stores + foreign-data wrapper definitions. A foreign-data wrapper is the + mechanism by which external data, residing on foreign servers, is + accessed. + </para> + + <table> + <title><structname>pg_foreign_data_wrapper</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>fdwname</structfield> <type>name</type> + </para> + <para> + Name of the foreign-data wrapper + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>fdwowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the foreign-data wrapper + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>fdwhandler</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + References a handler function that is responsible for + supplying execution routines for the foreign-data wrapper. + Zero if no handler is provided + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>fdwvalidator</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + References a validator function that is responsible for + checking the validity of the options given to the + foreign-data wrapper, as well as options for foreign servers and user + mappings using the foreign-data wrapper. Zero if no validator + is provided + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>fdwacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>fdwoptions</structfield> <type>text[]</type> + </para> + <para> + Foreign-data wrapper specific options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-foreign-server"> + <title><structname>pg_foreign_server</structname></title> + + <indexterm zone="catalog-pg-foreign-server"> + <primary>pg_foreign_server</primary> + </indexterm> + + <para> + The catalog <structname>pg_foreign_server</structname> stores + foreign server definitions. A foreign server describes a source + of external data, such as a remote server. Foreign + servers are accessed via foreign-data wrappers. + </para> + + <table> + <title><structname>pg_foreign_server</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvname</structfield> <type>name</type> + </para> + <para> + Name of the foreign server + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the foreign server + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvfdw</structfield> <type>oid</type> + (references <link linkend="catalog-pg-foreign-data-wrapper"><structname>pg_foreign_data_wrapper</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the foreign-data wrapper of this foreign server + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvtype</structfield> <type>text</type> + </para> + <para> + Type of the server (optional) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvversion</structfield> <type>text</type> + </para> + <para> + Version of the server (optional) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srvoptions</structfield> <type>text[]</type> + </para> + <para> + Foreign server specific options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-foreign-table"> + <title><structname>pg_foreign_table</structname></title> + + <indexterm zone="catalog-pg-foreign-table"> + <primary>pg_foreign_table</primary> + </indexterm> + + <para> + The catalog <structname>pg_foreign_table</structname> contains + auxiliary information about foreign tables. A foreign table is + primarily represented by a + <link linkend="catalog-pg-class"><structname>pg_class</structname></link> + entry, just like a regular table. Its <structname>pg_foreign_table</structname> + entry contains the information that is pertinent only to foreign tables + and not any other kind of relation. + </para> + + <table> + <title><structname>pg_foreign_table</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>ftrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry for this foreign table + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ftserver</structfield> <type>oid</type> + (references <link linkend="catalog-pg-foreign-server"><structname>pg_foreign_server</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the foreign server for this foreign table + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ftoptions</structfield> <type>text[]</type> + </para> + <para> + Foreign table options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-index"> + <title><structname>pg_index</structname></title> + + <indexterm zone="catalog-pg-index"> + <primary>pg_index</primary> + </indexterm> + + <para> + The catalog <structname>pg_index</structname> contains part of the information + about indexes. The rest is mostly in + <link linkend="catalog-pg-class"><structname>pg_class</structname></link>. + </para> + + <table> + <title><structname>pg_index</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>indexrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry for this index + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry for the table this index is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indnatts</structfield> <type>int2</type> + </para> + <para> + The total number of columns in the index (duplicates + <literal>pg_class.relnatts</literal>); this number includes both key and included attributes + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indnkeyatts</structfield> <type>int2</type> + </para> + <para> + The number of <firstterm>key columns</firstterm> in the index, + not counting any <firstterm>included columns</firstterm>, which are + merely stored and do not participate in the index semantics + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisunique</structfield> <type>bool</type> + </para> + <para> + If true, this is a unique index + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indnullsnotdistinct</structfield> <type>bool</type> + </para> + <para> + This value is only used for unique indexes. If false, this unique + index will consider null values distinct (so the index can contain + multiple null values in a column, the default PostgreSQL behavior). If + it is true, it will consider null values to be equal (so the index can + only contain one null value in a column). + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisprimary</structfield> <type>bool</type> + </para> + <para> + If true, this index represents the primary key of the table + (<structfield>indisunique</structfield> should always be true when this is true) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisexclusion</structfield> <type>bool</type> + </para> + <para> + If true, this index supports an exclusion constraint + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indimmediate</structfield> <type>bool</type> + </para> + <para> + If true, the uniqueness check is enforced immediately on + insertion + (irrelevant if <structfield>indisunique</structfield> is not true) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisclustered</structfield> <type>bool</type> + </para> + <para> + If true, the table was last clustered on this index + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisvalid</structfield> <type>bool</type> + </para> + <para> + If true, the index is currently valid for queries. False means the + index is possibly incomplete: it must still be modified by + <link linkend="sql-insert"><command>INSERT</command></link>/<link linkend="sql-update"><command>UPDATE</command></link> operations, but it cannot safely + be used for queries. If it is unique, the uniqueness property is not + guaranteed true either. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indcheckxmin</structfield> <type>bool</type> + </para> + <para> + If true, queries must not use the index until the <structfield>xmin</structfield> + of this <structname>pg_index</structname> row is below their <symbol>TransactionXmin</symbol> + event horizon, because the table may contain broken <link linkend="storage-hot">HOT chains</link> with + incompatible rows that they can see + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisready</structfield> <type>bool</type> + </para> + <para> + If true, the index is currently ready for inserts. False means the + index must be ignored by <link linkend="sql-insert"><command>INSERT</command></link>/<link linkend="sql-update"><command>UPDATE</command></link> + operations. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indislive</structfield> <type>bool</type> + </para> + <para> + If false, the index is in process of being dropped, and should be + ignored for all purposes (including HOT-safety decisions) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indisreplident</structfield> <type>bool</type> + </para> + <para> + If true this index has been chosen as <quote>replica identity</quote> + using <link linkend="sql-altertable-replica-identity"><command>ALTER TABLE ... + REPLICA IDENTITY USING INDEX ...</command></link> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indkey</structfield> <type>int2vector</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + This is an array of <structfield>indnatts</structfield> values that + indicate which table columns this index indexes. For example, a value + of <literal>1 3</literal> would mean that the first and the third table + columns make up the index entries. Key columns come before non-key + (included) columns. A zero in this array indicates that the + corresponding index attribute is an expression over the table columns, + rather than a simple column reference. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indcollation</structfield> <type>oidvector</type> + (references <link linkend="catalog-pg-collation"><structname>pg_collation</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For each column in the index key + (<structfield>indnkeyatts</structfield> values), this contains the OID + of the collation to use for the index, or zero if the column is not of + a collatable data type. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indclass</structfield> <type>oidvector</type> + (references <link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For each column in the index key + (<structfield>indnkeyatts</structfield> values), this contains the OID + of the operator class to use. See + <link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link> for details. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indoption</structfield> <type>int2vector</type> + </para> + <para> + This is an array of <structfield>indnkeyatts</structfield> values that + store per-column flag bits. The meaning of the bits is defined by + the index's access method. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indexprs</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression trees (in <function>nodeToString()</function> + representation) for index attributes that are not simple column + references. This is a list with one element for each zero + entry in <structfield>indkey</structfield>. Null if all index attributes + are simple references. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>indpred</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression tree (in <function>nodeToString()</function> + representation) for partial index predicate. Null if not a + partial index. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-inherits"> + <title><structname>pg_inherits</structname></title> + + <indexterm zone="catalog-pg-inherits"> + <primary>pg_inherits</primary> + </indexterm> + + <para> + The catalog <structname>pg_inherits</structname> records information about + table and index inheritance hierarchies. There is one entry for each direct + parent-child table or index relationship in the database. (Indirect + inheritance can be determined by following chains of entries.) + </para> + + <table> + <title><structname>pg_inherits</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>inhrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the child table or index + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>inhparent</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the parent table or index + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>inhseqno</structfield> <type>int4</type> + </para> + <para> + If there is more than one direct parent for a child table (multiple + inheritance), this number tells the order in which the + inherited columns are to be arranged. The count starts at 1. + </para> + <para> + Indexes cannot have multiple inheritance, since they can only inherit + when using declarative partitioning. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>inhdetachpending</structfield> <type>bool</type> + </para> + <para> + <literal>true</literal> for a partition that is in the process of + being detached; <literal>false</literal> otherwise. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + <sect1 id="catalog-pg-init-privs"> + <title><structname>pg_init_privs</structname></title> + + <indexterm zone="catalog-pg-init-privs"> + <primary>pg_init_privs</primary> + </indexterm> + + <para> + The catalog <structname>pg_init_privs</structname> records information about + the initial privileges of objects in the system. There is one entry + for each object in the database which has a non-default (non-NULL) + initial set of privileges. + </para> + + <para> + Objects can have initial privileges either by having those privileges set + when the system is initialized (by <application>initdb</application>) or when the + object is created during a <link linkend="sql-createextension"><command>CREATE EXTENSION</command></link> and the + extension script sets initial privileges using the <link linkend="sql-grant"><command>GRANT</command></link> + system. Note that the system will automatically handle recording of the + privileges during the extension script and that extension authors need + only use the <command>GRANT</command> and <command>REVOKE</command> + statements in their script to have the privileges recorded. The + <literal>privtype</literal> column indicates if the initial privilege was + set by <application>initdb</application> or during a + <command>CREATE EXTENSION</command> command. + </para> + + <para> + Objects which have initial privileges set by <application>initdb</application> will + have entries where <literal>privtype</literal> is + <literal>'i'</literal>, while objects which have initial privileges set + by <command>CREATE EXTENSION</command> will have entries where + <literal>privtype</literal> is <literal>'e'</literal>. + </para> + + <table> + <title><structname>pg_init_privs</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>objoid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the specific object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>classoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog the object is in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objsubid</structfield> <type>int4</type> + </para> + <para> + For a table column, this is the column number (the + <structfield>objoid</structfield> and <structfield>classoid</structfield> refer to the + table itself). For all other object types, this column is + zero. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>privtype</structfield> <type>char</type> + </para> + <para> + A code defining the type of initial privilege of this object; see text + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>initprivs</structfield> <type>aclitem[]</type> + </para> + <para> + The initial access privileges; see + <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-language"> + <title><structname>pg_language</structname></title> + + <indexterm zone="catalog-pg-language"> + <primary>pg_language</primary> + </indexterm> + + <para> + The catalog <structname>pg_language</structname> registers + languages in which you can write functions or stored procedures. + See <xref linkend="sql-createlanguage"/> + and <xref linkend="xplang"/> for more information about language handlers. + </para> + + <table> + <title><structname>pg_language</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanname</structfield> <type>name</type> + </para> + <para> + Name of the language + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the language + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanispl</structfield> <type>bool</type> + </para> + <para> + This is false for internal languages (such as + <acronym>SQL</acronym>) and true for user-defined languages. + Currently, <application>pg_dump</application> still uses this + to determine which languages need to be dumped, but this might be + replaced by a different mechanism in the future. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanpltrusted</structfield> <type>bool</type> + </para> + <para> + True if this is a trusted language, which means that it is believed + not to grant access to anything outside the normal SQL execution + environment. Only superusers can create functions in untrusted + languages. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanplcallfoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For noninternal languages this references the language + handler, which is a special function that is responsible for + executing all functions that are written in the particular + language. Zero for internal languages. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>laninline</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + This references a function that is responsible for executing + <quote>inline</quote> anonymous code blocks + (<xref linkend="sql-do"/> blocks). + Zero if inline blocks are not supported. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanvalidator</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + This references a language validator function that is responsible + for checking the syntax and validity of new functions when they + are created. Zero if no validator is provided. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lanacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-largeobject"> + <title><structname>pg_largeobject</structname></title> + + <indexterm zone="catalog-pg-largeobject"> + <primary>pg_largeobject</primary> + </indexterm> + + <para> + The catalog <structname>pg_largeobject</structname> holds the data making up + <quote>large objects</quote>. A large object is identified by an OID + assigned when it is created. Each large object is broken into + segments or <quote>pages</quote> small enough to be conveniently stored as rows + in <structname>pg_largeobject</structname>. + The amount of data per page is defined to be <symbol>LOBLKSIZE</symbol> (which is currently + <literal>BLCKSZ/4</literal>, or typically 2 kB). + </para> + + <para> + Prior to <productname>PostgreSQL</productname> 9.0, there was no permission structure + associated with large objects. As a result, + <structname>pg_largeobject</structname> was publicly readable and could be + used to obtain the OIDs (and contents) of all large objects in the system. + This is no longer the case; use + <link linkend="catalog-pg-largeobject-metadata"><structname>pg_largeobject_metadata</structname></link> + to obtain a list of large object OIDs. + </para> + + <table> + <title><structname>pg_largeobject</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>loid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-largeobject-metadata"><structname>pg_largeobject_metadata</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Identifier of the large object that includes this page + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pageno</structfield> <type>int4</type> + </para> + <para> + Page number of this page within its large object + (counting from zero) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>data</structfield> <type>bytea</type> + </para> + <para> + Actual data stored in the large object. + This will never be more than <symbol>LOBLKSIZE</symbol> bytes and might be less. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + Each row of <structname>pg_largeobject</structname> holds data + for one page of a large object, beginning at + byte offset (<literal>pageno * LOBLKSIZE</literal>) within the object. The implementation + allows sparse storage: pages might be missing, and might be shorter than + <literal>LOBLKSIZE</literal> bytes even if they are not the last page of the object. + Missing regions within a large object read as zeroes. + </para> + + </sect1> + + <sect1 id="catalog-pg-largeobject-metadata"> + <title><structname>pg_largeobject_metadata</structname></title> + + <indexterm zone="catalog-pg-largeobject-metadata"> + <primary>pg_largeobject_metadata</primary> + </indexterm> + + <para> + The catalog <structname>pg_largeobject_metadata</structname> + holds metadata associated with large objects. The actual large object + data is stored in + <link linkend="catalog-pg-largeobject"><structname>pg_largeobject</structname></link>. + </para> + + <table> + <title><structname>pg_largeobject_metadata</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lomowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the large object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>lomacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-namespace"> + <title><structname>pg_namespace</structname></title> + + <indexterm zone="catalog-pg-namespace"> + <primary>pg_namespace</primary> + </indexterm> + + <para> + The catalog <structname>pg_namespace</structname> stores namespaces. + A namespace is the structure underlying SQL schemas: each namespace + can have a separate collection of relations, types, etc. without name + conflicts. + </para> + + <table> + <title><structname>pg_namespace</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>nspname</structfield> <type>name</type> + </para> + <para> + Name of the namespace + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>nspowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the namespace + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>nspacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-opclass"> + <title><structname>pg_opclass</structname></title> + + <indexterm zone="catalog-pg-opclass"> + <primary>pg_opclass</primary> + </indexterm> + + <para> + The catalog <structname>pg_opclass</structname> defines + index access method operator classes. Each operator class defines + semantics for index columns of a particular data type and a particular + index access method. An operator class essentially specifies that a + particular operator family is applicable to a particular indexable column + data type. The set of operators from the family that are actually usable + with the indexed column are whichever ones accept the column's data type + as their left-hand input. + </para> + + <para> + Operator classes are described at length in <xref linkend="xindex"/>. + </para> + + <table> + <title><structname>pg_opclass</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcmethod</structfield> <type>oid</type> + (references <link linkend="catalog-pg-am"><structname>pg_am</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Index access method operator class is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcname</structfield> <type>name</type> + </para> + <para> + Name of this operator class + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Namespace of this operator class + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the operator class + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcfamily</structfield> <type>oid</type> + (references <link linkend="catalog-pg-opfamily"><structname>pg_opfamily</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Operator family containing the operator class + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcintype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Data type that the operator class indexes + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opcdefault</structfield> <type>bool</type> + </para> + <para> + True if this operator class is the default for <structfield>opcintype</structfield> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opckeytype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Type of data stored in index, or zero if same as <structfield>opcintype</structfield> + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + An operator class's <structfield>opcmethod</structfield> must match the + <structfield>opfmethod</structfield> of its containing operator family. + Also, there must be no more than one <structname>pg_opclass</structname> + row having <structfield>opcdefault</structfield> true for any given combination of + <structfield>opcmethod</structfield> and <structfield>opcintype</structfield>. + </para> + + </sect1> + + + <sect1 id="catalog-pg-operator"> + <title><structname>pg_operator</structname></title> + + <indexterm zone="catalog-pg-operator"> + <primary>pg_operator</primary> + </indexterm> + + <para> + The catalog <structname>pg_operator</structname> stores information about operators. + See <xref linkend="sql-createoperator"/> + and <xref linkend="xoper"/> for more information. + </para> + + <table> + <title><structname>pg_operator</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprname</structfield> <type>name</type> + </para> + <para> + Name of the operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the operator + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprkind</structfield> <type>char</type> + </para> + <para> + <literal>b</literal> = infix operator (<quote>both</quote>), + or <literal>l</literal> = prefix operator (<quote>left</quote>) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprcanmerge</structfield> <type>bool</type> + </para> + <para> + This operator supports merge joins + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprcanhash</structfield> <type>bool</type> + </para> + <para> + This operator supports hash joins + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprleft</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Type of the left operand (zero for a prefix operator) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprright</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Type of the right operand + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprresult</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Type of the result + (zero for a not-yet-defined <quote>shell</quote> operator) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprcom</structfield> <type>oid</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Commutator of this operator (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprnegate</structfield> <type>oid</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Negator of this operator (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprcode</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Function that implements this operator + (zero for a not-yet-defined <quote>shell</quote> operator) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprrest</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Restriction selectivity estimation function for this operator + (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>oprjoin</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Join selectivity estimation function for this operator + (zero if none) + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-opfamily"> + <title><structname>pg_opfamily</structname></title> + + <indexterm zone="catalog-pg-opfamily"> + <primary>pg_opfamily</primary> + </indexterm> + + <para> + The catalog <structname>pg_opfamily</structname> defines operator families. + Each operator family is a collection of operators and associated + support routines that implement the semantics specified for a particular + index access method. Furthermore, the operators in a family are all + <quote>compatible</quote>, in a way that is specified by the access method. + The operator family concept allows cross-data-type operators to be used + with indexes and to be reasoned about using knowledge of access method + semantics. + </para> + + <para> + Operator families are described at length in <xref linkend="xindex"/>. + </para> + + <table> + <title><structname>pg_opfamily</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opfmethod</structfield> <type>oid</type> + (references <link linkend="catalog-pg-am"><structname>pg_am</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Index access method operator family is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opfname</structfield> <type>name</type> + </para> + <para> + Name of this operator family + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opfnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Namespace of this operator family + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>opfowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the operator family + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + The majority of the information defining an operator family is not in its + <structname>pg_opfamily</structname> row, but in the associated rows in + <link linkend="catalog-pg-amop"><structname>pg_amop</structname></link>, + <link linkend="catalog-pg-amproc"><structname>pg_amproc</structname></link>, + and + <link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link>. + </para> + + </sect1> + + + <sect1 id="catalog-pg-parameter-acl"> + <title><structname>pg_parameter_acl</structname></title> + + <indexterm zone="catalog-pg-parameter-acl"> + <primary>pg_parameter_acl</primary> + </indexterm> + + <para> + The catalog <structname>pg_parameter_acl</structname> records configuration + parameters for which privileges have been granted to one or more roles. + No entry is made for parameters that have default privileges. + </para> + + <para> + Unlike most system catalogs, <structname>pg_parameter_acl</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_parameter_acl</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_parameter_acl</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>parname</structfield> <type>text</type> + </para> + <para> + The name of a configuration parameter for which privileges are granted + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>paracl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-partitioned-table"> + <title><structname>pg_partitioned_table</structname></title> + + <indexterm zone="catalog-pg-partitioned-table"> + <primary>pg_partitioned_table</primary> + </indexterm> + + <para> + The catalog <structname>pg_partitioned_table</structname> stores + information about how tables are partitioned. + </para> + + <table> + <title><structname>pg_partitioned_table</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>partrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry for this partitioned table + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partstrat</structfield> <type>char</type> + </para> + <para> + Partitioning strategy; <literal>h</literal> = hash partitioned table, + <literal>l</literal> = list partitioned table, <literal>r</literal> = range partitioned table + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partnatts</structfield> <type>int2</type> + </para> + <para> + The number of columns in the partition key + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partdefid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry for the default partition + of this partitioned table, or zero if this partitioned table does not + have a default partition + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partattrs</structfield> <type>int2vector</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + This is an array of <structfield>partnatts</structfield> values that + indicate which table columns are part of the partition key. For + example, a value of <literal>1 3</literal> would mean that the first + and the third table columns make up the partition key. A zero in this + array indicates that the corresponding partition key column is an + expression, rather than a simple column reference. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partclass</structfield> <type>oidvector</type> + (references <link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For each column in the partition key, this contains the OID of the + operator class to use. See + <link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link> for details. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partcollation</structfield> <type>oidvector</type> + (references <link linkend="catalog-pg-collation"><structname>pg_collation</structname></link>.<structfield>oid</structfield>) + </para> + <para> + For each column in the partition key, this contains the OID of the + collation to use for partitioning, or zero if the column is not + of a collatable data type. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>partexprs</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression trees (in <function>nodeToString()</function> + representation) for partition key columns that are not simple column + references. This is a list with one element for each zero + entry in <structfield>partattrs</structfield>. Null if all partition key columns + are simple references. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-policy"> + <title><structname>pg_policy</structname></title> + + <indexterm zone="catalog-pg-policy"> + <primary>pg_policy</primary> + </indexterm> + + <para> + The catalog <structname>pg_policy</structname> stores row-level + security policies for tables. A policy includes the kind of + command that it applies to (possibly all commands), the roles that it + applies to, the expression to be added as a security-barrier + qualification to queries that include the table, and the expression + to be added as a <literal>WITH CHECK</literal> option for queries that attempt to + add new records to the table. + </para> + + <table> + <title><structname>pg_policy</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polname</structfield> <type>name</type> + </para> + <para> + The name of the policy + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table to which the policy applies + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polcmd</structfield> <type>char</type> + </para> + <para> + The command type to which the policy is applied: + <literal>r</literal> for <xref linkend="sql-select"/>, + <literal>a</literal> for <xref linkend="sql-insert"/>, + <literal>w</literal> for <xref linkend="sql-update"/>, + <literal>d</literal> for <xref linkend="sql-delete"/>, + or <literal>*</literal> for all + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polpermissive</structfield> <type>bool</type> + </para> + <para> + Is the policy permissive or restrictive? + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polroles</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The roles to which the policy is applied; + zero means <literal>PUBLIC</literal> + (and normally appears alone in the array) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polqual</structfield> <type>pg_node_tree</type> + </para> + <para> + The expression tree to be added to the security barrier qualifications for queries that use the table + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>polwithcheck</structfield> <type>pg_node_tree</type> + </para> + <para> + The expression tree to be added to the WITH CHECK qualifications for queries that attempt to add rows to the table + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <note> + <para> + Policies stored in <structname>pg_policy</structname> are applied only when + <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relrowsecurity</structfield> is set for + their table. + </para> + </note> + + </sect1> + + <sect1 id="catalog-pg-proc"> + <title><structname>pg_proc</structname></title> + + <indexterm zone="catalog-pg-proc"> + <primary>pg_proc</primary> + </indexterm> + + <para> + The catalog <structname>pg_proc</structname> stores information about + functions, procedures, aggregate functions, and window functions + (collectively also known as routines). See <xref + linkend="sql-createfunction"/>, <xref linkend="sql-createprocedure"/>, and + <xref linkend="xfunc"/> for more information. + </para> + + <para> + If <structfield>prokind</structfield> indicates that the entry is for an + aggregate function, there should be a matching row in + <link linkend="catalog-pg-aggregate"><structfield>pg_aggregate</structfield></link>. + </para> + + <table> + <title><structname>pg_proc</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proname</structfield> <type>name</type> + </para> + <para> + Name of the function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pronamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prolang</structfield> <type>oid</type> + (references <link linkend="catalog-pg-language"><structname>pg_language</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Implementation language or call interface of this function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>procost</structfield> <type>float4</type> + </para> + <para> + Estimated execution cost (in units of + <xref linkend="guc-cpu-operator-cost"/>); if <structfield>proretset</structfield>, + this is cost per row returned + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prorows</structfield> <type>float4</type> + </para> + <para> + Estimated number of result rows (zero if not <structfield>proretset</structfield>) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>provariadic</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Data type of the variadic array parameter's elements, + or zero if the function does not have a variadic parameter + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prosupport</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Planner support function for this function + (see <xref linkend="xfunc-optimization"/>), or zero if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prokind</structfield> <type>char</type> + </para> + <para> + <literal>f</literal> for a normal function, <literal>p</literal> + for a procedure, <literal>a</literal> for an aggregate function, or + <literal>w</literal> for a window function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prosecdef</structfield> <type>bool</type> + </para> + <para> + Function is a security definer (i.e., a <quote>setuid</quote> + function) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proleakproof</structfield> <type>bool</type> + </para> + <para> + The function has no side effects. No information about the + arguments is conveyed except via the return value. Any function + that might throw an error depending on the values of its arguments + is not leak-proof. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proisstrict</structfield> <type>bool</type> + </para> + <para> + Function returns null if any call argument is null. In that + case the function won't actually be called at all. Functions + that are not <quote>strict</quote> must be prepared to handle + null inputs. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proretset</structfield> <type>bool</type> + </para> + <para> + Function returns a set (i.e., multiple values of the specified + data type) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>provolatile</structfield> <type>char</type> + </para> + <para> + <structfield>provolatile</structfield> tells whether the function's + result depends only on its input arguments, or is affected by outside + factors. + It is <literal>i</literal> for <quote>immutable</quote> functions, + which always deliver the same result for the same inputs. + It is <literal>s</literal> for <quote>stable</quote> functions, + whose results (for fixed inputs) do not change within a scan. + It is <literal>v</literal> for <quote>volatile</quote> functions, + whose results might change at any time. (Use <literal>v</literal> also + for functions with side-effects, so that calls to them cannot get + optimized away.) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proparallel</structfield> <type>char</type> + </para> + <para> + <structfield>proparallel</structfield> tells whether the function + can be safely run in parallel mode. + It is <literal>s</literal> for functions which are safe to run in + parallel mode without restriction. + It is <literal>r</literal> for functions which can be run in parallel + mode, but their execution is restricted to the parallel group leader; + parallel worker processes cannot invoke these functions. + It is <literal>u</literal> for functions which are unsafe in parallel + mode; the presence of such a function forces a serial execution plan. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pronargs</structfield> <type>int2</type> + </para> + <para> + Number of input arguments + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pronargdefaults</structfield> <type>int2</type> + </para> + <para> + Number of arguments that have defaults + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prorettype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Data type of the return value + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proargtypes</structfield> <type>oidvector</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + An array of the data types of the function arguments. This includes + only input arguments (including <literal>INOUT</literal> and + <literal>VARIADIC</literal> arguments), and thus represents + the call signature of the function. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proallargtypes</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + An array of the data types of the function arguments. This includes + all arguments (including <literal>OUT</literal> and + <literal>INOUT</literal> arguments); however, if all the + arguments are <literal>IN</literal> arguments, this field will be null. + Note that subscripting is 1-based, whereas for historical reasons + <structfield>proargtypes</structfield> is subscripted from 0. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proargmodes</structfield> <type>char[]</type> + </para> + <para> + An array of the modes of the function arguments, encoded as + <literal>i</literal> for <literal>IN</literal> arguments, + <literal>o</literal> for <literal>OUT</literal> arguments, + <literal>b</literal> for <literal>INOUT</literal> arguments, + <literal>v</literal> for <literal>VARIADIC</literal> arguments, + <literal>t</literal> for <literal>TABLE</literal> arguments. + If all the arguments are <literal>IN</literal> arguments, + this field will be null. + Note that subscripts correspond to positions of + <structfield>proallargtypes</structfield> not <structfield>proargtypes</structfield>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proargnames</structfield> <type>text[]</type> + </para> + <para> + An array of the names of the function arguments. + Arguments without a name are set to empty strings in the array. + If none of the arguments have a name, this field will be null. + Note that subscripts correspond to positions of + <structfield>proallargtypes</structfield> not <structfield>proargtypes</structfield>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proargdefaults</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression trees (in <function>nodeToString()</function> representation) + for default values. This is a list with + <structfield>pronargdefaults</structfield> elements, corresponding to the last + <replaceable>N</replaceable> <emphasis>input</emphasis> arguments (i.e., the last + <replaceable>N</replaceable> <structfield>proargtypes</structfield> positions). + If none of the arguments have defaults, this field will be null. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>protrftypes</structfield> <type>oid[]</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + An array of the argument/result data type(s) for which to apply + transforms (from the function's <literal>TRANSFORM</literal> + clause). Null if none. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prosrc</structfield> <type>text</type> + </para> + <para> + This tells the function handler how to invoke the function. It + might be the actual source code of the function for interpreted + languages, a link symbol, a file name, or just about anything + else, depending on the implementation language/call convention. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>probin</structfield> <type>text</type> + </para> + <para> + Additional information about how to invoke the function. + Again, the interpretation is language-specific. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prosqlbody</structfield> <type>pg_node_tree</type> + </para> + <para> + Pre-parsed SQL function body. This is used for SQL-language + functions when the body is given in SQL-standard notation + rather than as a string literal. It's null in other cases. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proconfig</structfield> <type>text[]</type> + </para> + <para> + Function's local settings for run-time configuration variables + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>proacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + For compiled functions, both built-in and dynamically loaded, + <structfield>prosrc</structfield> contains the function's C-language + name (link symbol). + For SQL-language functions, <structfield>prosrc</structfield> contains + the function's source text if that is specified as a string literal; + but if the function body is specified in SQL-standard style, + <structfield>prosrc</structfield> is unused (typically it's an empty + string) and <structfield>prosqlbody</structfield> contains the + pre-parsed definition. + For all other currently-known language types, + <structfield>prosrc</structfield> contains the function's source + text. <structfield>probin</structfield> is null except for + dynamically-loaded C functions, for which it gives the name of the + shared library file containing the function. + </para> + + </sect1> + + <sect1 id="catalog-pg-publication"> + <title><structname>pg_publication</structname></title> + + <indexterm zone="catalog-pg-publication"> + <primary>pg_publication</primary> + </indexterm> + + <para> + The catalog <structname>pg_publication</structname> contains all + publications created in the database. For more on publications see + <xref linkend="logical-replication-publication"/>. + </para> + + <table> + <title><structname>pg_publication</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubname</structfield> <type>name</type> + </para> + <para> + Name of the publication + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the publication + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>puballtables</structfield> <type>bool</type> + </para> + <para> + If true, this publication automatically includes all tables + in the database, including any that will be created in the future. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubinsert</structfield> <type>bool</type> + </para> + <para> + If true, <xref linkend="sql-insert"/> operations are replicated for + tables in the publication. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubupdate</structfield> <type>bool</type> + </para> + <para> + If true, <xref linkend="sql-update"/> operations are replicated for + tables in the publication. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubdelete</structfield> <type>bool</type> + </para> + <para> + If true, <xref linkend="sql-delete"/> operations are replicated for + tables in the publication. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubtruncate</structfield> <type>bool</type> + </para> + <para> + If true, <xref linkend="sql-truncate"/> operations are replicated for + tables in the publication. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pubviaroot</structfield> <type>bool</type> + </para> + <para> + If true, operations on a leaf partition are replicated using the + identity and schema of its topmost partitioned ancestor mentioned in the + publication instead of its own. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-publication-namespace"> + <title><structname>pg_publication_namespace</structname></title> + + <indexterm zone="catalog-pg-publication-namespace"> + <primary>pg_publication_namespace</primary> + </indexterm> + + <para> + The catalog <structname>pg_publication_namespace</structname> contains the + mapping between schemas and publications in the database. This is a + many-to-many mapping. + </para> + + <table> + <title><structname>pg_publication_namespace</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pnpubid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-publication"><structname>pg_publication</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Reference to publication + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>pnnspid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Reference to schema + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-publication-rel"> + <title><structname>pg_publication_rel</structname></title> + + <indexterm zone="catalog-pg-publication-rel"> + <primary>pg_publication_rel</primary> + </indexterm> + + <para> + The catalog <structname>pg_publication_rel</structname> contains the + mapping between relations and publications in the database. This is a + many-to-many mapping. See also <xref linkend="view-pg-publication-tables"/> + for a more user-friendly view of this information. + </para> + + <table> + <title><structname>pg_publication_rel</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prpubid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-publication"><structname>pg_publication</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Reference to publication + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Reference to relation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prqual</structfield> <type>pg_node_tree</type> + </para> + <para>Expression tree (in <function>nodeToString()</function> + representation) for the relation's publication qualifying condition. Null + if there is no publication qualifying condition.</para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prattrs</structfield> <type>int2vector</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + This is an array of values that indicates which table columns are + part of the publication. For example, a value of <literal>1 3</literal> + would mean that the first and the third table columns are published. + A null value indicates that all columns are published. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-range"> + <title><structname>pg_range</structname></title> + + <indexterm zone="catalog-pg-range"> + <primary>pg_range</primary> + </indexterm> + + <para> + The catalog <structname>pg_range</structname> stores information about + range types. This is in addition to the types' entries in + <link linkend="catalog-pg-type"><structname>pg_type</structname></link>. + </para> + + <table> + <title><structname>pg_range</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>rngtypid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the range type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rngsubtype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the element type (subtype) of this range type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rngmultitypid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the multirange type for this range type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rngcollation</structfield> <type>oid</type> + (references <link linkend="catalog-pg-collation"><structname>pg_collation</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the collation used for range comparisons, or zero if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rngsubopc</structfield> <type>oid</type> + (references <link linkend="catalog-pg-opclass"><structname>pg_opclass</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the subtype's operator class used for range comparisons + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rngcanonical</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the function to convert a range value into canonical form, + or zero if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rngsubdiff</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the function to return the difference between two element + values as <type>double precision</type>, or zero if none + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + <structfield>rngsubopc</structfield> (plus <structfield>rngcollation</structfield>, if the + element type is collatable) determines the sort ordering used by the range + type. <structfield>rngcanonical</structfield> is used when the element type is + discrete. <structfield>rngsubdiff</structfield> is optional but should be supplied to + improve performance of GiST indexes on the range type. + </para> + + </sect1> + + <sect1 id="catalog-pg-replication-origin"> + <title><structname>pg_replication_origin</structname></title> + + <indexterm zone="catalog-pg-replication-origin"> + <primary>pg_replication_origin</primary> + </indexterm> + + <para> + The <structname>pg_replication_origin</structname> catalog contains + all replication origins created. For more on replication origins + see <xref linkend="replication-origins"/>. + </para> + + <para> + Unlike most system catalogs, <structname>pg_replication_origin</structname> + is shared across all databases of a cluster: there is only one copy + of <structname>pg_replication_origin</structname> per cluster, not one per + database. + </para> + + <table> + <title><structname>pg_replication_origin</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>roident</structfield> <type>oid</type> + </para> + <para> + A unique, cluster-wide identifier for the replication + origin. Should never leave the system. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>roname</structfield> <type>text</type> + </para> + <para> + The external, user defined, name of a replication + origin. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-rewrite"> + <title><structname>pg_rewrite</structname></title> + + <indexterm zone="catalog-pg-rewrite"> + <primary>pg_rewrite</primary> + </indexterm> + + <para> + The catalog <structname>pg_rewrite</structname> stores rewrite rules for tables and views. + </para> + + <table> + <title><structname>pg_rewrite</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>rulename</structfield> <type>name</type> + </para> + <para> + Rule name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ev_class</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table this rule is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ev_type</structfield> <type>char</type> + </para> + <para> + Event type that the rule is for: 1 = <xref linkend="sql-select"/>, 2 = + <xref linkend="sql-update"/>, 3 = <xref linkend="sql-insert"/>, 4 = + <xref linkend="sql-delete"/> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ev_enabled</structfield> <type>char</type> + </para> + <para> + Controls in which <xref linkend="guc-session-replication-role"/> modes + the rule fires. + <literal>O</literal> = rule fires in <quote>origin</quote> and <quote>local</quote> modes, + <literal>D</literal> = rule is disabled, + <literal>R</literal> = rule fires in <quote>replica</quote> mode, + <literal>A</literal> = rule fires always. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>is_instead</structfield> <type>bool</type> + </para> + <para> + True if the rule is an <literal>INSTEAD</literal> rule + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ev_qual</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression tree (in the form of a + <function>nodeToString()</function> representation) for the + rule's qualifying condition + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>ev_action</structfield> <type>pg_node_tree</type> + </para> + <para> + Query tree (in the form of a + <function>nodeToString()</function> representation) for the + rule's action + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <note> + <para> + <literal>pg_class.relhasrules</literal> + must be true if a table has any rules in this catalog. + </para> + </note> + + </sect1> + + <sect1 id="catalog-pg-seclabel"> + <title><structname>pg_seclabel</structname></title> + + <indexterm zone="catalog-pg-seclabel"> + <primary>pg_seclabel</primary> + </indexterm> + + <para> + The catalog <structname>pg_seclabel</structname> stores security + labels on database objects. Security labels can be manipulated + with the <link linkend="sql-security-label"><command>SECURITY LABEL</command></link> command. For an easier + way to view security labels, see <xref linkend="view-pg-seclabels"/>. + </para> + + <para> + See also <link linkend="catalog-pg-shseclabel"><structname>pg_shseclabel</structname></link>, + which performs a similar function for security labels of database objects + that are shared across a database cluster. + </para> + + <table> + <title><structname>pg_seclabel</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>objoid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the object this security label pertains to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>classoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog this object appears in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objsubid</structfield> <type>int4</type> + </para> + <para> + For a security label on a table column, this is the column number (the + <structfield>objoid</structfield> and <structfield>classoid</structfield> refer to + the table itself). For all other object types, this column is + zero. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>provider</structfield> <type>text</type> + </para> + <para> + The label provider associated with this label. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>label</structfield> <type>text</type> + </para> + <para> + The security label applied to this object. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-sequence"> + <title><structname>pg_sequence</structname></title> + + <indexterm zone="catalog-pg-sequence"> + <primary>pg_sequence</primary> + </indexterm> + + <para> + The catalog <structname>pg_sequence</structname> contains information about + sequences. Some of the information about sequences, such as the name and + the schema, is in + <link linkend="catalog-pg-class"><structname>pg_class</structname></link> + </para> + + <table> + <title><structname>pg_sequence</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>seqrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry for this sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqtypid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Data type of the sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqstart</structfield> <type>int8</type> + </para> + <para> + Start value of the sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqincrement</structfield> <type>int8</type> + </para> + <para> + Increment value of the sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqmax</structfield> <type>int8</type> + </para> + <para> + Maximum value of the sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqmin</structfield> <type>int8</type> + </para> + <para> + Minimum value of the sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqcache</structfield> <type>int8</type> + </para> + <para> + Cache size of the sequence + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>seqcycle</structfield> <type>bool</type> + </para> + <para> + Whether the sequence cycles + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-shdepend"> + <title><structname>pg_shdepend</structname></title> + + <indexterm zone="catalog-pg-shdepend"> + <primary>pg_shdepend</primary> + </indexterm> + + <para> + The catalog <structname>pg_shdepend</structname> records the + dependency relationships between database objects and shared objects, + such as roles. This information allows + <productname>PostgreSQL</productname> to ensure that those objects are + unreferenced before attempting to delete them. + </para> + + <para> + See also <link linkend="catalog-pg-depend"><structname>pg_depend</structname></link>, + which performs a similar function for dependencies involving objects + within a single database. + </para> + + <para> + Unlike most system catalogs, <structname>pg_shdepend</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_shdepend</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_shdepend</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>dbid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-database"><structname>pg_database</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the database the dependent object is in, + or zero for a shared object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>classid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog the dependent object is in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the specific dependent object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>objsubid</structfield> <type>int4</type> + </para> + <para> + For a table column, this is the column number (the + <structfield>objid</structfield> and <structfield>classid</structfield> refer to the + table itself). For all other object types, this column is zero. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>refclassid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog the referenced object is in + (must be a shared catalog) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>refobjid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the specific referenced object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>deptype</structfield> <type>char</type> + </para> + <para> + A code defining the specific semantics of this dependency relationship; see text + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + In all cases, a <structname>pg_shdepend</structname> entry indicates that + the referenced object cannot be dropped without also dropping the dependent + object. However, there are several subflavors identified by + <structfield>deptype</structfield>: + + <variablelist> + <varlistentry> + <term><symbol>SHARED_DEPENDENCY_OWNER</symbol> (<literal>o</literal>)</term> + <listitem> + <para> + The referenced object (which must be a role) is the owner of the + dependent object. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>SHARED_DEPENDENCY_ACL</symbol> (<literal>a</literal>)</term> + <listitem> + <para> + The referenced object (which must be a role) is mentioned in the + ACL (access control list, i.e., privileges list) of the + dependent object. (A <symbol>SHARED_DEPENDENCY_ACL</symbol> entry is + not made for the owner of the object, since the owner will have + a <symbol>SHARED_DEPENDENCY_OWNER</symbol> entry anyway.) + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>SHARED_DEPENDENCY_POLICY</symbol> (<literal>r</literal>)</term> + <listitem> + <para> + The referenced object (which must be a role) is mentioned as the + target of a dependent policy object. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><symbol>SHARED_DEPENDENCY_TABLESPACE</symbol> (<literal>t</literal>)</term> + <listitem> + <para> + The referenced object (which must be a tablespace) is mentioned as + the tablespace for a relation that doesn't have storage. + </para> + </listitem> + </varlistentry> + </variablelist> + + Other dependency flavors might be needed in future. Note in particular + that the current definition only supports roles and tablespaces as referenced + objects. + </para> + + <para> + As in the <structname>pg_depend</structname> catalog, most objects + created during <application>initdb</application> are + considered <quote>pinned</quote>. No entries are made + in <structname>pg_shdepend</structname> that would have a pinned + object as either referenced or dependent object. + </para> + + </sect1> + + <sect1 id="catalog-pg-shdescription"> + <title><structname>pg_shdescription</structname></title> + + <indexterm zone="catalog-pg-shdescription"> + <primary>pg_shdescription</primary> + </indexterm> + + <para> + The catalog <structname>pg_shdescription</structname> stores optional + descriptions (comments) for shared database objects. Descriptions can be + manipulated with the <link linkend="sql-comment"><command>COMMENT</command></link> command and viewed with + <application>psql</application>'s <literal>\d</literal> commands. + </para> + + <para> + See also <link linkend="catalog-pg-description"><structname>pg_description</structname></link>, + which performs a similar function for descriptions involving objects + within a single database. + </para> + + <para> + Unlike most system catalogs, <structname>pg_shdescription</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_shdescription</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_shdescription</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>objoid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the object this description pertains to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>classoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog this object appears in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>description</structfield> <type>text</type> + </para> + <para> + Arbitrary text that serves as the description of this object + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + <sect1 id="catalog-pg-shseclabel"> + <title><structname>pg_shseclabel</structname></title> + + <indexterm zone="catalog-pg-shseclabel"> + <primary>pg_shseclabel</primary> + </indexterm> + + <para> + The catalog <structname>pg_shseclabel</structname> stores security + labels on shared database objects. Security labels can be manipulated + with the <link linkend="sql-security-label"><command>SECURITY LABEL</command></link> command. For an easier + way to view security labels, see <xref linkend="view-pg-seclabels"/>. + </para> + + <para> + See also <link linkend="catalog-pg-seclabel"><structname>pg_seclabel</structname></link>, + which performs a similar function for security labels involving objects + within a single database. + </para> + + <para> + Unlike most system catalogs, <structname>pg_shseclabel</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_shseclabel</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_shseclabel</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>objoid</structfield> <type>oid</type> + (references any OID column) + </para> + <para> + The OID of the object this security label pertains to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>classoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the system catalog this object appears in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>provider</structfield> <type>text</type> + </para> + <para> + The label provider associated with this label. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>label</structfield> <type>text</type> + </para> + <para> + The security label applied to this object. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-statistic"> + <title><structname>pg_statistic</structname></title> + + <indexterm zone="catalog-pg-statistic"> + <primary>pg_statistic</primary> + </indexterm> + + <para> + The catalog <structname>pg_statistic</structname> stores + statistical data about the contents of the database. Entries are + created by <link linkend="sql-analyze"><command>ANALYZE</command></link> + and subsequently used by the query planner. Note that all the + statistical data is inherently approximate, even assuming that it + is up-to-date. + </para> + + <para> + Normally there is one entry, with <structfield>stainherit</structfield> = + <literal>false</literal>, for each table column that has been analyzed. + If the table has inheritance children or partitions, a second entry with + <structfield>stainherit</structfield> = <literal>true</literal> is also created. This row + represents the column's statistics over the inheritance tree, i.e., + statistics for the data you'd see with + <literal>SELECT <replaceable>column</replaceable> FROM <replaceable>table</replaceable>*</literal>, + whereas the <structfield>stainherit</structfield> = <literal>false</literal> row represents + the results of + <literal>SELECT <replaceable>column</replaceable> FROM ONLY <replaceable>table</replaceable></literal>. + </para> + + <para> + <structname>pg_statistic</structname> also stores statistical data about + the values of index expressions. These are described as if they were + actual data columns; in particular, <structfield>starelid</structfield> + references the index. No entry is made for an ordinary non-expression + index column, however, since it would be redundant with the entry + for the underlying table column. Currently, entries for index expressions + always have <structfield>stainherit</structfield> = <literal>false</literal>. + </para> + + <para> + Since different kinds of statistics might be appropriate for different + kinds of data, <structname>pg_statistic</structname> is designed not + to assume very much about what sort of statistics it stores. Only + extremely general statistics (such as nullness) are given dedicated + columns in <structname>pg_statistic</structname>. Everything else + is stored in <quote>slots</quote>, which are groups of associated columns + whose content is identified by a code number in one of the slot's columns. + For more information see + <filename>src/include/catalog/pg_statistic.h</filename>. + </para> + + <para> + <structname>pg_statistic</structname> should not be readable by the + public, since even statistical information about a table's contents + might be considered sensitive. (Example: minimum and maximum values + of a salary column might be quite interesting.) + <link linkend="view-pg-stats"><structname>pg_stats</structname></link> + is a publicly readable view on + <structname>pg_statistic</structname> that only exposes information + about those tables that are readable by the current user. + </para> + + <table> + <title><structname>pg_statistic</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>starelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table or index that the described column belongs to + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>staattnum</structfield> <type>int2</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + The number of the described column + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stainherit</structfield> <type>bool</type> + </para> + <para> + If true, the stats include values from child tables, not just the + values in the specified relation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stanullfrac</structfield> <type>float4</type> + </para> + <para> + The fraction of the column's entries that are null + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stawidth</structfield> <type>int4</type> + </para> + <para> + The average stored width, in bytes, of nonnull entries + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stadistinct</structfield> <type>float4</type> + </para> + <para> + The number of distinct nonnull data values in the column. + A value greater than zero is the actual number of distinct values. + A value less than zero is the negative of a multiplier for the number + of rows in the table; for example, a column in which about 80% of the + values are nonnull and each nonnull value appears about twice on + average could be represented by <structfield>stadistinct</structfield> = -0.4. + A zero value means the number of distinct values is unknown. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stakind<replaceable>N</replaceable></structfield> <type>int2</type> + </para> + <para> + A code number indicating the kind of statistics stored in the + <replaceable>N</replaceable>th <quote>slot</quote> of the + <structname>pg_statistic</structname> row. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>staop<replaceable>N</replaceable></structfield> <type>oid</type> + (references <link linkend="catalog-pg-operator"><structname>pg_operator</structname></link>.<structfield>oid</structfield>) + </para> + <para> + An operator used to derive the statistics stored in the + <replaceable>N</replaceable>th <quote>slot</quote>. For example, a + histogram slot would show the <literal><</literal> operator + that defines the sort order of the data. + Zero if the statistics kind does not require an operator. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stacoll<replaceable>N</replaceable></structfield> <type>oid</type> + (references <link linkend="catalog-pg-collation"><structname>pg_collation</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The collation used to derive the statistics stored in the + <replaceable>N</replaceable>th <quote>slot</quote>. For example, a + histogram slot for a collatable column would show the collation that + defines the sort order of the data. Zero for noncollatable data. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stanumbers<replaceable>N</replaceable></structfield> <type>float4[]</type> + </para> + <para> + Numerical statistics of the appropriate kind for the + <replaceable>N</replaceable>th <quote>slot</quote>, or null if the slot + kind does not involve numerical values + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stavalues<replaceable>N</replaceable></structfield> <type>anyarray</type> + </para> + <para> + Column data values of the appropriate kind for the + <replaceable>N</replaceable>th <quote>slot</quote>, or null if the slot + kind does not store any data values. Each array's element + values are actually of the specific column's data type, or a related + type such as an array's element type, so there is no way to define + these columns' type more specifically than <type>anyarray</type>. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + <sect1 id="catalog-pg-statistic-ext"> + <title><structname>pg_statistic_ext</structname></title> + + <indexterm zone="catalog-pg-statistic-ext"> + <primary>pg_statistic_ext</primary> + </indexterm> + + <para> + The catalog <structname>pg_statistic_ext</structname> + holds definitions of extended planner statistics. + Each row in this catalog corresponds to a <firstterm>statistics object</firstterm> + created with <link linkend="sql-createstatistics"><command>CREATE STATISTICS</command></link>. + </para> + + <table> + <title><structname>pg_statistic_ext</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Table containing the columns described by this object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxname</structfield> <type>name</type> + </para> + <para> + Name of the statistics object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this statistics object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the statistics object + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxstattarget</structfield> <type>int4</type> + </para> + <para> + <structfield>stxstattarget</structfield> controls the level of detail + of statistics accumulated for this statistics object by + <link linkend="sql-analyze"><command>ANALYZE</command></link>. + A zero value indicates that no statistics should be collected. + A negative value says to use the maximum of the statistics targets of + the referenced columns, if set, or the system default statistics target. + Positive values of <structfield>stxstattarget</structfield> + determine the target number of <quote>most common values</quote> + to collect. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxkeys</structfield> <type>int2vector</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + An array of attribute numbers, indicating which table columns are + covered by this statistics object; + for example a value of <literal>1 3</literal> would + mean that the first and the third table columns are covered + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxkind</structfield> <type>char[]</type> + </para> + <para> + An array containing codes for the enabled statistics kinds; + valid values are: + <literal>d</literal> for n-distinct statistics, + <literal>f</literal> for functional dependency statistics, + <literal>m</literal> for most common values (MCV) list statistics, and + <literal>e</literal> for expression statistics + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxexprs</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression trees (in <function>nodeToString()</function> + representation) for statistics object attributes that are not simple + column references. This is a list with one element per expression. + Null if all statistics object attributes are simple references. + </para></entry> + </row> + + </tbody> + </tgroup> + </table> + + <para> + The <structname>pg_statistic_ext</structname> entry is filled in + completely during <link linkend="sql-createstatistics"><command>CREATE STATISTICS</command></link>, but the actual + statistical values are not computed then. + Subsequent <link linkend="sql-analyze"><command>ANALYZE</command></link> commands compute the desired values + and populate an entry in the + <link linkend="catalog-pg-statistic-ext-data"><structname>pg_statistic_ext_data</structname></link> + catalog. + </para> + </sect1> + + <sect1 id="catalog-pg-statistic-ext-data"> + <title><structname>pg_statistic_ext_data</structname></title> + + <indexterm zone="catalog-pg-statistic-ext"> + <primary>pg_statistic_ext_data</primary> + </indexterm> + + <para> + The catalog <structname>pg_statistic_ext_data</structname> + holds data for extended planner statistics defined in + <link linkend="catalog-pg-statistic-ext"><structname>pg_statistic_ext</structname></link>. + Each row in this catalog corresponds to a <firstterm>statistics object</firstterm> + created with <link linkend="sql-createstatistics"><command>CREATE STATISTICS</command></link>. + </para> + + <para> + Normally there is one entry, with <structfield>stxdinherit</structfield> = + <literal>false</literal>, for each statistics object that has been analyzed. + If the table has inheritance children or partitions, a second entry with + <structfield>stxdinherit</structfield> = <literal>true</literal> is also created. + This row represents the statistics object over the inheritance tree, i.e., + statistics for the data you'd see with + <literal>SELECT * FROM <replaceable>table</replaceable>*</literal>, + whereas the <structfield>stxdinherit</structfield> = <literal>false</literal> row + represents the results of + <literal>SELECT * FROM ONLY <replaceable>table</replaceable></literal>. + </para> + + <para> + Like <link linkend="catalog-pg-statistic"><structname>pg_statistic</structname></link>, + <structname>pg_statistic_ext_data</structname> should not be + readable by the public, since the contents might be considered sensitive. + (Example: most common combinations of values in columns might be quite + interesting.) + <link linkend="view-pg-stats-ext"><structname>pg_stats_ext</structname></link> + is a publicly readable view + on <structname>pg_statistic_ext_data</structname> (after joining + with <link linkend="catalog-pg-statistic-ext"><structname>pg_statistic_ext</structname></link>) that only exposes + information about those tables and columns that are readable by the + current user. + </para> + + <table> + <title><structname>pg_statistic_ext_data</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>stxoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-statistic-ext"><structname>pg_statistic_ext</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Extended statistics object containing the definition for this data + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxdinherit</structfield> <type>bool</type> + </para> + <para> + If true, the stats include values from child tables, not just the + values in the specified relation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxdndistinct</structfield> <type>pg_ndistinct</type> + </para> + <para> + N-distinct counts, serialized as <structname>pg_ndistinct</structname> type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxddependencies</structfield> <type>pg_dependencies</type> + </para> + <para> + Functional dependency statistics, serialized + as <structname>pg_dependencies</structname> type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxdmcv</structfield> <type>pg_mcv_list</type> + </para> + <para> + MCV (most-common values) list statistics, serialized as + <structname>pg_mcv_list</structname> type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>stxdexpr</structfield> <type>pg_statistic[]</type> + </para> + <para> + Per-expression statistics, serialized as an array of + <structname>pg_statistic</structname> type + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + <sect1 id="catalog-pg-subscription"> + <title><structname>pg_subscription</structname></title> + + <indexterm zone="catalog-pg-subscription"> + <primary>pg_subscription</primary> + </indexterm> + + <para> + The catalog <structname>pg_subscription</structname> contains all existing + logical replication subscriptions. For more information about logical + replication see <xref linkend="logical-replication"/>. + </para> + + <para> + Unlike most system catalogs, <structname>pg_subscription</structname> is + shared across all databases of a cluster: there is only one copy + of <structname>pg_subscription</structname> per cluster, not one per + database. + </para> + + <para> + Access to the column <structfield>subconninfo</structfield> is revoked from + normal users, because it could contain plain-text passwords. + </para> + + <table> + <title><structname>pg_subscription</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subdbid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-database"><structname>pg_database</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the database that the subscription resides in + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subskiplsn</structfield> <type>pg_lsn</type> + </para> + <para> + Finish LSN of the transaction whose changes are to be skipped, if a valid + LSN; otherwise <literal>0/0</literal>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subname</structfield> <type>name</type> + </para> + <para> + Name of the subscription + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the subscription + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subenabled</structfield> <type>bool</type> + </para> + <para> + If true, the subscription is enabled and should be replicating + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subbinary</structfield> <type>bool</type> + </para> + <para> + If true, the subscription will request that the publisher send data + in binary format + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>substream</structfield> <type>bool</type> + </para> + <para> + If true, the subscription will allow streaming of in-progress + transactions + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subtwophasestate</structfield> <type>char</type> + </para> + <para> + State codes for two-phase mode: + <literal>d</literal> = disabled, + <literal>p</literal> = pending enablement, + <literal>e</literal> = enabled + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subdisableonerr</structfield> <type>bool</type> + </para> + <para> + If true, the subscription will be disabled if one of its workers + detects an error + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subconninfo</structfield> <type>text</type> + </para> + <para> + Connection string to the upstream database + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subslotname</structfield> <type>name</type> + </para> + <para> + Name of the replication slot in the upstream database (also used + for the local replication origin name); + null represents <literal>NONE</literal> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subsynccommit</structfield> <type>text</type> + </para> + <para> + The <varname>synchronous_commit</varname> + setting for the subscription's workers to use + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>subpublications</structfield> <type>text[]</type> + </para> + <para> + Array of subscribed publication names. These reference + publications defined in the upstream database. For more on publications + see <xref linkend="logical-replication-publication"/>. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-subscription-rel"> + <title><structname>pg_subscription_rel</structname></title> + + <indexterm zone="catalog-pg-subscription-rel"> + <primary>pg_subscription_rel</primary> + </indexterm> + + <para> + The catalog <structname>pg_subscription_rel</structname> contains the + state for each replicated relation in each subscription. This is a + many-to-many mapping. + </para> + + <para> + This catalog only contains tables known to the subscription after running + either <link linkend="sql-createsubscription"><command>CREATE SUBSCRIPTION</command></link> or + <link linkend="sql-altersubscription"><command>ALTER SUBSCRIPTION ... REFRESH + PUBLICATION</command></link>. + </para> + + <table> + <title><structname>pg_subscription_rel</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>srsubid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-subscription"><structname>pg_subscription</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Reference to subscription + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Reference to relation + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srsubstate</structfield> <type>char</type> + </para> + <para> + State code: + <literal>i</literal> = initialize, + <literal>d</literal> = data is being copied, + <literal>f</literal> = finished table copy, + <literal>s</literal> = synchronized, + <literal>r</literal> = ready (normal replication) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>srsublsn</structfield> <type>pg_lsn</type> + </para> + <para> + Remote LSN of the state change used for synchronization coordination + when in <literal>s</literal> or <literal>r</literal> states, + otherwise null + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + <sect1 id="catalog-pg-tablespace"> + <title><structname>pg_tablespace</structname></title> + + <indexterm zone="catalog-pg-tablespace"> + <primary>pg_tablespace</primary> + </indexterm> + + <para> + The catalog <structname>pg_tablespace</structname> stores information + about the available tablespaces. Tables can be placed in particular + tablespaces to aid administration of disk layout. + </para> + + <para> + Unlike most system catalogs, <structname>pg_tablespace</structname> + is shared across all databases of a cluster: there is only one + copy of <structname>pg_tablespace</structname> per cluster, not + one per database. + </para> + + <table> + <title><structname>pg_tablespace</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>spcname</structfield> <type>name</type> + </para> + <para> + Tablespace name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>spcowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the tablespace, usually the user who created it + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>spcacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>spcoptions</structfield> <type>text[]</type> + </para> + <para> + Tablespace-level options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-transform"> + <title><structname>pg_transform</structname></title> + + <indexterm zone="catalog-pg-transform"> + <primary>pg_transform</primary> + </indexterm> + + <para> + The catalog <structname>pg_transform</structname> stores information about + transforms, which are a mechanism to adapt data types to procedural + languages. See <xref linkend="sql-createtransform"/> for more information. + </para> + + <table> + <title><structname>pg_transform</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>trftype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the data type this transform is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>trflang</structfield> <type>oid</type> + (references <link linkend="catalog-pg-language"><structname>pg_language</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the language this transform is for + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>trffromsql</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the function to use when converting the data type for input + to the procedural language (e.g., function parameters). Zero is stored + if the default behavior should be used. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>trftosql</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the function to use when converting output from the + procedural language (e.g., return values) to the data type. Zero is + stored if the default behavior should be used. + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-trigger"> + <title><structname>pg_trigger</structname></title> + + <indexterm zone="catalog-pg-trigger"> + <primary>pg_trigger</primary> + </indexterm> + + <para> + The catalog <structname>pg_trigger</structname> stores triggers on tables + and views. + See <xref linkend="sql-createtrigger"/> + for more information. + </para> + + <table> + <title><structname>pg_trigger</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table this trigger is on + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgparentid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-trigger"><structname>pg_trigger</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Parent trigger that this trigger is cloned from (this happens when + partitions are created or attached to a partitioned table); + zero if not a clone + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgname</structfield> <type>name</type> + </para> + <para> + Trigger name (must be unique among triggers of same table) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgfoid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The function to be called + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgtype</structfield> <type>int2</type> + </para> + <para> + Bit mask identifying trigger firing conditions + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgenabled</structfield> <type>char</type> + </para> + <para> + Controls in which <xref linkend="guc-session-replication-role"/> modes + the trigger fires. + <literal>O</literal> = trigger fires in <quote>origin</quote> and <quote>local</quote> modes, + <literal>D</literal> = trigger is disabled, + <literal>R</literal> = trigger fires in <quote>replica</quote> mode, + <literal>A</literal> = trigger fires always. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgisinternal</structfield> <type>bool</type> + </para> + <para> + True if trigger is internally generated (usually, to enforce + the constraint identified by <structfield>tgconstraint</structfield>) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgconstrrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The table referenced by a referential integrity constraint + (zero if trigger is not for a referential integrity constraint) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgconstrindid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The index supporting a unique, primary key, referential integrity, + or exclusion constraint + (zero if trigger is not for one of these types of constraint) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgconstraint</structfield> <type>oid</type> + (references <link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The <link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link> entry associated with the trigger + (zero if trigger is not for a constraint) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgdeferrable</structfield> <type>bool</type> + </para> + <para> + True if constraint trigger is deferrable + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tginitdeferred</structfield> <type>bool</type> + </para> + <para> + True if constraint trigger is initially deferred + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgnargs</structfield> <type>int2</type> + </para> + <para> + Number of argument strings passed to trigger function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgattr</structfield> <type>int2vector</type> + (references <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.<structfield>attnum</structfield>) + </para> + <para> + Column numbers, if trigger is column-specific; otherwise an + empty array + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgargs</structfield> <type>bytea</type> + </para> + <para> + Argument strings to pass to trigger, each NULL-terminated + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgqual</structfield> <type>pg_node_tree</type> + </para> + <para> + Expression tree (in <function>nodeToString()</function> + representation) for the trigger's <literal>WHEN</literal> condition, or null + if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgoldtable</structfield> <type>name</type> + </para> + <para> + <literal>REFERENCING</literal> clause name for <literal>OLD TABLE</literal>, + or null if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tgnewtable</structfield> <type>name</type> + </para> + <para> + <literal>REFERENCING</literal> clause name for <literal>NEW TABLE</literal>, + or null if none + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <para> + Currently, column-specific triggering is supported only for + <literal>UPDATE</literal> events, and so <structfield>tgattr</structfield> is relevant + only for that event type. <structfield>tgtype</structfield> might + contain bits for other event types as well, but those are presumed + to be table-wide regardless of what is in <structfield>tgattr</structfield>. + </para> + + <note> + <para> + When <structfield>tgconstraint</structfield> is nonzero, + <structfield>tgconstrrelid</structfield>, <structfield>tgconstrindid</structfield>, + <structfield>tgdeferrable</structfield>, and <structfield>tginitdeferred</structfield> are + largely redundant with the referenced <link linkend="catalog-pg-constraint"><structname>pg_constraint</structname></link> entry. + However, it is possible for a non-deferrable trigger to be associated + with a deferrable constraint: foreign key constraints can have some + deferrable and some non-deferrable triggers. + </para> + </note> + + <note> + <para> + <literal>pg_class.relhastriggers</literal> + must be true if a relation has any triggers in this catalog. + </para> + </note> + + </sect1> + + + <sect1 id="catalog-pg-ts-config"> + <title><structname>pg_ts_config</structname></title> + + <indexterm zone="catalog-pg-ts-config"> + <primary>pg_ts_config</primary> + </indexterm> + + <para> + The <structname>pg_ts_config</structname> catalog contains entries + representing text search configurations. A configuration specifies + a particular text search parser and a list of dictionaries to use + for each of the parser's output token types. The parser is shown + in the <structname>pg_ts_config</structname> entry, but the + token-to-dictionary mapping is defined by subsidiary entries in <link + linkend="catalog-pg-ts-config-map"><structname>pg_ts_config_map</structname></link>. + </para> + + <para> + <productname>PostgreSQL</productname>'s text search features are + described at length in <xref linkend="textsearch"/>. + </para> + + <table> + <title><structname>pg_ts_config</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>cfgname</structfield> <type>name</type> + </para> + <para> + Text search configuration name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>cfgnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this configuration + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>cfgowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the configuration + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>cfgparser</structfield> <type>oid</type> + (references <link linkend="catalog-pg-ts-parser"><structname>pg_ts_parser</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the text search parser for this configuration + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-ts-config-map"> + <title><structname>pg_ts_config_map</structname></title> + + <indexterm zone="catalog-pg-ts-config-map"> + <primary>pg_ts_config_map</primary> + </indexterm> + + <para> + The <structname>pg_ts_config_map</structname> catalog contains entries + showing which text search dictionaries should be consulted, and in + what order, for each output token type of each text search configuration's + parser. + </para> + + <para> + <productname>PostgreSQL</productname>'s text search features are + described at length in <xref linkend="textsearch"/>. + </para> + + <table> + <title><structname>pg_ts_config_map</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>mapcfg</structfield> <type>oid</type> + (references <link linkend="catalog-pg-ts-config"><structname>pg_ts_config</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the <link linkend="catalog-pg-ts-config"><structname>pg_ts_config</structname></link> entry owning this map entry + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>maptokentype</structfield> <type>int4</type> + </para> + <para> + A token type emitted by the configuration's parser + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>mapseqno</structfield> <type>int4</type> + </para> + <para> + Order in which to consult this entry (lower + <structfield>mapseqno</structfield>s first) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>mapdict</structfield> <type>oid</type> + (references <link linkend="catalog-pg-ts-dict"><structname>pg_ts_dict</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the text search dictionary to consult + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-ts-dict"> + <title><structname>pg_ts_dict</structname></title> + + <indexterm zone="catalog-pg-ts-dict"> + <primary>pg_ts_dict</primary> + </indexterm> + + <para> + The <structname>pg_ts_dict</structname> catalog contains entries + defining text search dictionaries. A dictionary depends on a text + search template, which specifies all the implementation functions + needed; the dictionary itself provides values for the user-settable + parameters supported by the template. This division of labor allows + dictionaries to be created by unprivileged users. The parameters + are specified by a text string <structfield>dictinitoption</structfield>, + whose format and meaning vary depending on the template. + </para> + + <para> + <productname>PostgreSQL</productname>'s text search features are + described at length in <xref linkend="textsearch"/>. + </para> + + <table> + <title><structname>pg_ts_dict</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>dictname</structfield> <type>name</type> + </para> + <para> + Text search dictionary name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>dictnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this dictionary + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>dictowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the dictionary + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>dicttemplate</structfield> <type>oid</type> + (references <link linkend="catalog-pg-ts-template"><structname>pg_ts_template</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the text search template for this dictionary + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>dictinitoption</structfield> <type>text</type> + </para> + <para> + Initialization option string for the template + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-ts-parser"> + <title><structname>pg_ts_parser</structname></title> + + <indexterm zone="catalog-pg-ts-parser"> + <primary>pg_ts_parser</primary> + </indexterm> + + <para> + The <structname>pg_ts_parser</structname> catalog contains entries + defining text search parsers. A parser is responsible for splitting + input text into lexemes and assigning a token type to each lexeme. + Since a parser must be implemented by C-language-level functions, + creation of new parsers is restricted to database superusers. + </para> + + <para> + <productname>PostgreSQL</productname>'s text search features are + described at length in <xref linkend="textsearch"/>. + </para> + + <table> + <title><structname>pg_ts_parser</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prsname</structfield> <type>name</type> + </para> + <para> + Text search parser name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prsnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this parser + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prsstart</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the parser's startup function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prstoken</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the parser's next-token function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prsend</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the parser's shutdown function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prsheadline</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the parser's headline function (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>prslextype</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the parser's lextype function + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-ts-template"> + <title><structname>pg_ts_template</structname></title> + + <indexterm zone="catalog-pg-ts-template"> + <primary>pg_ts_template</primary> + </indexterm> + + <para> + The <structname>pg_ts_template</structname> catalog contains entries + defining text search templates. A template is the implementation + skeleton for a class of text search dictionaries. + Since a template must be implemented by C-language-level functions, + creation of new templates is restricted to database superusers. + </para> + + <para> + <productname>PostgreSQL</productname>'s text search features are + described at length in <xref linkend="textsearch"/>. + </para> + + <table> + <title><structname>pg_ts_template</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tmplname</structfield> <type>name</type> + </para> + <para> + Text search template name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tmplnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this template + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tmplinit</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the template's initialization function (zero if none) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>tmpllexize</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the template's lexize function + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + + + <sect1 id="catalog-pg-type"> + <title><structname>pg_type</structname></title> + + <indexterm zone="catalog-pg-type"> + <primary>pg_type</primary> + </indexterm> + + <para> + The catalog <structname>pg_type</structname> stores information about data + types. Base types and enum types (scalar types) are created with + <link linkend="sql-createtype"><command>CREATE TYPE</command></link>, and + domains with + <link linkend="sql-createdomain"><command>CREATE DOMAIN</command></link>. + A composite type is automatically created for each table in the database, to + represent the row structure of the table. It is also possible to create + composite types with <command>CREATE TYPE AS</command>. + </para> + + <table> + <title><structname>pg_type</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typname</structfield> <type>name</type> + </para> + <para> + Data type name + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typnamespace</structfield> <type>oid</type> + (references <link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the namespace that contains this type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typowner</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Owner of the type + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typlen</structfield> <type>int2</type> + </para> + <para> + For a fixed-size type, <structfield>typlen</structfield> is the number + of bytes in the internal representation of the type. But for a + variable-length type, <structfield>typlen</structfield> is negative. + -1 indicates a <quote>varlena</quote> type (one that has a length word), + -2 indicates a null-terminated C string. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typbyval</structfield> <type>bool</type> + </para> + <para> + <structfield>typbyval</structfield> determines whether internal + routines pass a value of this type by value or by reference. + <structfield>typbyval</structfield> had better be false if + <structfield>typlen</structfield> is not 1, 2, or 4 (or 8 on machines + where Datum is 8 bytes). + Variable-length types are always passed by reference. Note that + <structfield>typbyval</structfield> can be false even if the + length would allow pass-by-value. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typtype</structfield> <type>char</type> + </para> + <para> + <structfield>typtype</structfield> is + <literal>b</literal> for a base type, + <literal>c</literal> for a composite type (e.g., a table's row type), + <literal>d</literal> for a domain, + <literal>e</literal> for an enum type, + <literal>p</literal> for a pseudo-type, + <literal>r</literal> for a range type, or + <literal>m</literal> for a multirange type. + See also <structfield>typrelid</structfield> and + <structfield>typbasetype</structfield>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typcategory</structfield> <type>char</type> + </para> + <para> + <structfield>typcategory</structfield> is an arbitrary classification + of data types that is used by the parser to determine which implicit + casts should be <quote>preferred</quote>. + See <xref linkend="catalog-typcategory-table"/>. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typispreferred</structfield> <type>bool</type> + </para> + <para> + True if the type is a preferred cast target within its + <structfield>typcategory</structfield> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typisdefined</structfield> <type>bool</type> + </para> + <para> + True if the type is defined, false if this is a placeholder + entry for a not-yet-defined type. When + <structfield>typisdefined</structfield> is false, nothing + except the type name, namespace, and OID can be relied on. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typdelim</structfield> <type>char</type> + </para> + <para> + Character that separates two values of this type when parsing + array input. Note that the delimiter is associated with the array + element data type, not the array data type. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typrelid</structfield> <type>oid</type> + (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If this is a composite type (see + <structfield>typtype</structfield>), then this column points to + the <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry that defines the + corresponding table. (For a free-standing composite type, the + <link linkend="catalog-pg-class"><structname>pg_class</structname></link> entry doesn't really represent + a table, but it is needed anyway for the type's + <link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link> entries to link to.) + Zero for non-composite types. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typsubscript</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Subscripting handler function's OID, or zero if this type doesn't + support subscripting. Types that are <quote>true</quote> array + types have <structfield>typsubscript</structfield> + = <function>array_subscript_handler</function>, but other types may + have other handler functions to implement specialized subscripting + behavior. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typelem</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If <structfield>typelem</structfield> is not zero then it + identifies another row in <structname>pg_type</structname>, + defining the type yielded by subscripting. This should be zero + if <structfield>typsubscript</structfield> is zero. However, it can + be zero when <structfield>typsubscript</structfield> isn't zero, if the + handler doesn't need <structfield>typelem</structfield> to + determine the subscripting result type. + Note that a <structfield>typelem</structfield> dependency is + considered to imply physical containment of the element type in + this type; so DDL changes on the element type might be restricted + by the presence of this type. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typarray</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If <structfield>typarray</structfield> is not zero then it + identifies another row in <structname>pg_type</structname>, which + is the <quote>true</quote> array type having this type as element + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typinput</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Input conversion function (text format) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typoutput</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Output conversion function (text format) + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typreceive</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Input conversion function (binary format), or zero if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typsend</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Output conversion function (binary format), or zero if none + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typmodin</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Type modifier input function, or zero if type does not support modifiers + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typmodout</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Type modifier output function, or zero to use the standard format + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typanalyze</structfield> <type>regproc</type> + (references <link linkend="catalog-pg-proc"><structname>pg_proc</structname></link>.<structfield>oid</structfield>) + </para> + <para> + Custom <xref linkend="sql-analyze"/> function, + or zero to use the standard function + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typalign</structfield> <type>char</type> + </para> + <para> + <structfield>typalign</structfield> is the alignment required + when storing a value of this type. It applies to storage on + disk as well as most representations of the value inside + <productname>PostgreSQL</productname>. + When multiple values are stored consecutively, such + as in the representation of a complete row on disk, padding is + inserted before a datum of this type so that it begins on the + specified boundary. The alignment reference is the beginning + of the first datum in the sequence. + Possible values are: + <itemizedlist> + <listitem> + <para><literal>c</literal> = <type>char</type> alignment, i.e., no alignment needed.</para> + </listitem> + <listitem> + <para><literal>s</literal> = <type>short</type> alignment (2 bytes on most machines).</para> + </listitem> + <listitem> + <para><literal>i</literal> = <type>int</type> alignment (4 bytes on most machines).</para> + </listitem> + <listitem> + <para><literal>d</literal> = <type>double</type> alignment (8 bytes on many machines, but by no means all).</para> + </listitem> + </itemizedlist> + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typstorage</structfield> <type>char</type> + </para> + <para> + <structfield>typstorage</structfield> tells for varlena + types (those with <structfield>typlen</structfield> = -1) if + the type is prepared for toasting and what the default strategy + for attributes of this type should be. + Possible values are: + <itemizedlist> + <listitem> + <para> + <literal>p</literal> (plain): Values must always be stored plain + (non-varlena types always use this value). + </para> + </listitem> + <listitem> + <para> + <literal>e</literal> (external): Values can be stored in a + secondary <quote>TOAST</quote> relation (if relation has one, see + <literal>pg_class.reltoastrelid</literal>). + </para> + </listitem> + <listitem> + <para> + <literal>m</literal> (main): Values can be compressed and stored + inline. + </para> + </listitem> + <listitem> + <para> + <literal>x</literal> (extended): Values can be compressed and/or + moved to a secondary relation. + </para> + </listitem> + </itemizedlist> + <literal>x</literal> is the usual choice for toast-able types. + Note that <literal>m</literal> values can also be moved out to + secondary storage, but only as a last resort (<literal>e</literal> + and <literal>x</literal> values are moved first). + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typnotnull</structfield> <type>bool</type> + </para> + <para> + <structfield>typnotnull</structfield> represents a not-null + constraint on a type. Used for domains only. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typbasetype</structfield> <type>oid</type> + (references <link linkend="catalog-pg-type"><structname>pg_type</structname></link>.<structfield>oid</structfield>) + </para> + <para> + If this is a domain (see <structfield>typtype</structfield>), then + <structfield>typbasetype</structfield> identifies the type that this + one is based on. Zero if this type is not a domain. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typtypmod</structfield> <type>int4</type> + </para> + <para> + Domains use <structfield>typtypmod</structfield> to record the <literal>typmod</literal> + to be applied to their base type (-1 if base type does not use a + <literal>typmod</literal>). -1 if this type is not a domain. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typndims</structfield> <type>int4</type> + </para> + <para> + <structfield>typndims</structfield> is the number of array dimensions + for a domain over an array (that is, <structfield>typbasetype</structfield> is + an array type). + Zero for types other than domains over array types. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typcollation</structfield> <type>oid</type> + (references <link linkend="catalog-pg-collation"><structname>pg_collation</structname></link>.<structfield>oid</structfield>) + </para> + <para> + <structfield>typcollation</structfield> specifies the collation + of the type. If the type does not support collations, this will + be zero. A base type that supports collations will have a nonzero + value here, typically <symbol>DEFAULT_COLLATION_OID</symbol>. + A domain over a collatable type can have a collation OID different + from its base type's, if one was specified for the domain. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typdefaultbin</structfield> <type>pg_node_tree</type> + </para> + <para> + If <structfield>typdefaultbin</structfield> is not null, it is the + <function>nodeToString()</function> + representation of a default expression for the type. This is + only used for domains. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typdefault</structfield> <type>text</type> + </para> + <para> + <structfield>typdefault</structfield> is null if the type has no associated + default value. If <structfield>typdefaultbin</structfield> is not null, + <structfield>typdefault</structfield> must contain a human-readable version of the + default expression represented by <structfield>typdefaultbin</structfield>. If + <structfield>typdefaultbin</structfield> is null and <structfield>typdefault</structfield> is + not, then <structfield>typdefault</structfield> is the external representation of + the type's default value, which can be fed to the type's input + converter to produce a constant. + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>typacl</structfield> <type>aclitem[]</type> + </para> + <para> + Access privileges; see <xref linkend="ddl-priv"/> for details + </para></entry> + </row> + </tbody> + </tgroup> + </table> + + <note> + <para> + For fixed-width types used in system tables, it is critical that the size + and alignment defined in <structname>pg_type</structname> + agree with the way that the compiler will lay out the column in + a structure representing a table row. + </para> + </note> + + <para> + <xref linkend="catalog-typcategory-table"/> lists the system-defined values + of <structfield>typcategory</structfield>. Any future additions to this list will + also be upper-case ASCII letters. All other ASCII characters are reserved + for user-defined categories. + </para> + + <table id="catalog-typcategory-table"> + <title><structfield>typcategory</structfield> Codes</title> + + <tgroup cols="2"> + <thead> + <row> + <entry>Code</entry> + <entry>Category</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literal>A</literal></entry> + <entry>Array types</entry> + </row> + <row> + <entry><literal>B</literal></entry> + <entry>Boolean types</entry> + </row> + <row> + <entry><literal>C</literal></entry> + <entry>Composite types</entry> + </row> + <row> + <entry><literal>D</literal></entry> + <entry>Date/time types</entry> + </row> + <row> + <entry><literal>E</literal></entry> + <entry>Enum types</entry> + </row> + <row> + <entry><literal>G</literal></entry> + <entry>Geometric types</entry> + </row> + <row> + <entry><literal>I</literal></entry> + <entry>Network address types</entry> + </row> + <row> + <entry><literal>N</literal></entry> + <entry>Numeric types</entry> + </row> + <row> + <entry><literal>P</literal></entry> + <entry>Pseudo-types</entry> + </row> + <row> + <entry><literal>R</literal></entry> + <entry>Range types</entry> + </row> + <row> + <entry><literal>S</literal></entry> + <entry>String types</entry> + </row> + <row> + <entry><literal>T</literal></entry> + <entry>Timespan types</entry> + </row> + <row> + <entry><literal>U</literal></entry> + <entry>User-defined types</entry> + </row> + <row> + <entry><literal>V</literal></entry> + <entry>Bit-string types</entry> + </row> + <row> + <entry><literal>X</literal></entry> + <entry><type>unknown</type> type</entry> + </row> + <row> + <entry><literal>Z</literal></entry> + <entry>Internal-use types</entry> + </row> + </tbody> + </tgroup> + </table> + + </sect1> + + + <sect1 id="catalog-pg-user-mapping"> + <title><structname>pg_user_mapping</structname></title> + + <indexterm zone="catalog-pg-user-mapping"> + <primary>pg_user_mapping</primary> + </indexterm> + + <para> + The catalog <structname>pg_user_mapping</structname> stores + the mappings from local user to remote. Access to this catalog is + restricted from normal users, use the view + <link linkend="view-pg-user-mappings"><structname>pg_user_mappings</structname></link> + instead. + </para> + + <table> + <title><structname>pg_user_mapping</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>oid</structfield> <type>oid</type> + </para> + <para> + Row identifier + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>umuser</structfield> <type>oid</type> + (references <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>.<structfield>oid</structfield>) + </para> + <para> + OID of the local role being mapped, or zero if the user mapping is public + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>umserver</structfield> <type>oid</type> + (references <link linkend="catalog-pg-foreign-server"><structname>pg_foreign_server</structname></link>.<structfield>oid</structfield>) + </para> + <para> + The OID of the foreign server that contains this mapping + </para></entry> + </row> + + <row> + <entry role="catalog_table_entry"><para role="column_definition"> + <structfield>umoptions</structfield> <type>text[]</type> + </para> + <para> + User mapping specific options, as <quote>keyword=value</quote> strings + </para></entry> + </row> + </tbody> + </tgroup> + </table> + </sect1> + +</chapter> |