{"Entry":{"collection":"type","key":"txid_snapshot","name":"txid_snapshot","aliases":[],"metadata":{"aliases":[],"category":"Other built-in types","content_hash":"7e55757d1ab8e2139bde72dc120f49225d3f78260c6a8903defbe0bbe6fb9561","imported_at":"2026-09-30T00:40:36.976417+08:00","name":"txid_snapshot","name_zh":"","slug":"txid_snapshot","summary":"user-level transaction ID snapshot (deprecated; see pg_snapshot )"}},"Definition":{"Collection":"type","Key":"txid_snapshot","SourceDatabase":"center","Version":"18","SourceTable":"data_type","SourceKey":"txid_snapshot","SourceRevision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","Facts":{"aliases":[],"casts":[],"catalog":{"array_type_name":"_txid_snapshot","array_type_oid":"2949","descr":"transaction snapshot","oid":"2970","typacl":"_null_","typalign":"d","typanalyze":"-","typarray":"0","typbasetype":"0","typbyval":"f","typcategory":"U","typcollation":"0","typdefault":"_null_","typdefaultbin":"_null_","typdelim":"','","typelem":"0","typinput":"txid_snapshot_in","typisdefined":"t","typispreferred":"f","typlen":"-1","typmodin":"-","typmodout":"-","typname":"txid_snapshot","typnamespace":"pg_catalog","typndims":"0","typnotnull":"f","typoutput":"txid_snapshot_out","typowner":"POSTGRES","typreceive":"txid_snapshot_recv","typrelid":"0","typsend":"txid_snapshot_send","typstorage":"x","typsubscript":"-","typtype":"b","typtypmod":"-1"},"comparison_data":{"aliases":[],"casts":[],"catalog":{"array_type_name":"_txid_snapshot","typacl":"_null_","typalign":"d","typanalyze":"-","typarray":"_txid_snapshot","typbasetype":"0","typbyval":"f","typcategory":"U","typcollation":"0","typdefault":"_null_","typdefaultbin":"_null_","typdelim":",","typelem":"0","typinput":"txid_snapshot_in","typisdefined":"t","typispreferred":"f","typlen":"-1","typmodin":"-","typmodout":"-","typname":"txid_snapshot","typndims":"0","typnotnull":"f","typoutput":"txid_snapshot_out","typreceive":"txid_snapshot_recv","typrelid":"0","typsend":"txid_snapshot_send","typstorage":"x","typsubscript":"-","typtype":"b","typtypmod":"-1"},"facts":[{"label":"Catalog name","value":"pg_catalog.txid_snapshot"},{"label":"Declared length","value":"Variable length (varlena)"},{"label":"Documented declaration","value":"txid_snapshot_xip ( txid_snapshot ) → setof bigint See pg_snapshot_xip() ."},{"label":"Documented declaration","value":"txid_snapshot_xmax ( txid_snapshot ) → bigint See pg_snapshot_xmax() ."},{"label":"Documented declaration","value":"txid_snapshot_xmin ( txid_snapshot ) → bigint See pg_snapshot_xmin() ."},{"label":"Documented declaration","value":"txid_visible_in_snapshot ( bigint , txid_snapshot ) → boolean See pg_visible_in_snapshot() ."},{"label":"Input function","value":"txid_snapshot_in"},{"label":"Output function","value":"txid_snapshot_out"},{"label":"Storage strategy","value":"extended"},{"label":"Type OID","value":"2970"},{"label":"Type kind","value":"Base type"}],"operator_classes":[],"operators":[],"ranges":[]},"comparison_hash":"4822549a0dc11fd7124b114e93391b70a73018cc06f47535c65b43fceeb8456f","coverage":"source inventory; exact declared input types for operator classes","description":["user-level transaction ID snapshot (deprecated; see pg_snapshot )"],"facts":[{"label":"Catalog name","value":"pg_catalog.txid_snapshot"},{"label":"Type OID","value":"2970"},{"label":"Type kind","value":"Base type"},{"label":"Declared length","value":"Variable length (varlena)"},{"label":"Storage strategy","value":"extended"},{"label":"Input function","value":"txid_snapshot_in"},{"label":"Output function","value":"txid_snapshot_out"},{"label":"Documented declaration","value":"txid_snapshot_xip ( txid_snapshot ) → setof bigint See pg_snapshot_xip() ."},{"label":"Documented declaration","value":"txid_snapshot_xmax ( txid_snapshot ) → bigint See pg_snapshot_xmax() ."},{"label":"Documented declaration","value":"txid_snapshot_xmin ( txid_snapshot ) → bigint See pg_snapshot_xmin() ."},{"label":"Documented declaration","value":"txid_visible_in_snapshot ( bigint , txid_snapshot ) → boolean See pg_visible_in_snapshot() ."}],"manual_documentation":"dedicated family chapter","manual_html":"\u003cdiv class=\"sect1\" id=\"FUNCTIONS-INFO\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2 class=\"title\"\u003e9.27. System Information Functions and Operators \u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cp\u003eThe functions described in this section are used to obtain various information about a \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e installation.\u003c/p\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-SESSION\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.1. Session Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-SESSION-TABLE\" title=\"Table 9.71. Session Information Functions\"\u003eTable 9.71\u003c/a\u003e shows several functions that extract session and system information.\u003c/p\u003e\n\u003cp\u003eIn addition to the functions listed in this section, there are a number of functions related to the statistics system that also provide system information. See \u003ca class=\"xref\" href=\"/docs/18/monitoring-stats.html#MONITORING-STATS-FUNCTIONS\" title=\"27.2.26. Statistics Functions\"\u003eSection 27.2.26\u003c/a\u003e for more information.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-SESSION-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.71. Session Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_catalog\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_database\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the current database. (Databases are called \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ecatalogs\u003c/span\u003e”\u003c/span\u003e in the SQL standard, so \u003ccode class=\"function\"\u003ecurrent_catalog\u003c/code\u003e is the standard's spelling.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_query\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the text of the currently executing query, as submitted by the client (which might contain more than one statement).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is equivalent to \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e  \u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the schema that is first in the search path (or a null value if the search path is empty). This is the schema that will be used for any tables or other named objects that are created without specifying a target schema.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e  \u003ccode class=\"function\"\u003ecurrent_schemas\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003einclude_implicit\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ename[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the names of all schemas presently in the effective search path, in their priority order. (Items in the current \u003ca class=\"xref\" href=\"/docs/18/runtime-config-client.html#GUC-SEARCH-PATH\"\u003esearch_path\u003c/a\u003e setting that do not correspond to existing, searchable schemas are omitted.) If the Boolean argument is \u003ccode class=\"literal\"\u003etrue\u003c/code\u003e, then implicitly-searched system schemas such as \u003ccode class=\"literal\"\u003epg_catalog\u003c/code\u003e are included in the result.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e  \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the user name of the current execution context.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_client_addr\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einet\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP address of the current client, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_client_port\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP port number of the current client, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_server_addr\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einet\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP address on which the server accepted the current connection, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_server_port\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP port number on which the server accepted the current connection, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_backend_pid\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the process ID of the server process attached to the current session.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_blocking_pids\u003c/code\u003e ( \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the process ID(s) of the sessions that are blocking the server process with the specified process ID from acquiring a lock, or an empty array if there is no such server process or it is not blocked.\u003c/p\u003e\n\u003cp\u003eOne server process blocks another if it either holds a lock that conflicts with the blocked process's lock request (hard block), or is waiting for a lock that would conflict with the blocked process's lock request and is ahead of it in the wait queue (soft block). When using parallel queries the result always lists client-visible process IDs (that is, \u003ccode class=\"function\"\u003epg_backend_pid\u003c/code\u003e results) even if the actual lock is held or awaited by a child worker process. As a result of that, there may be duplicated PIDs in the result. Also note that when a prepared transaction holds a conflicting lock, it will be represented by a zero process ID.\u003c/p\u003e\n\u003cp\u003eFrequent calls to this function could have some impact on database performance, because it needs exclusive access to the lock manager's shared state for a short time.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_conf_load_time\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the time when the server configuration files were last loaded. If the current session was alive at the time, this will be the time when the session itself re-read the configuration files (so the reading will vary a little in different sessions). Otherwise it is the time when the postmaster process re-read the configuration files.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e    \u003ccode class=\"function\"\u003epg_current_logfile\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the path name of the log file currently in use by the logging collector. The path includes the \u003ca class=\"xref\" href=\"/docs/18/runtime-config-logging.html#GUC-LOG-DIRECTORY\"\u003elog_directory\u003c/a\u003e directory and the individual log file name. The result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the logging collector is disabled. When multiple log files exist, each in a different format, \u003ccode class=\"function\"\u003epg_current_logfile\u003c/code\u003e without an argument returns the path of the file having the first format found in the ordered list: \u003ccode class=\"literal\"\u003estderr\u003c/code\u003e, \u003ccode class=\"literal\"\u003ecsvlog\u003c/code\u003e, \u003ccode class=\"literal\"\u003ejsonlog\u003c/code\u003e. \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if no log file has any of these formats. To request information about a specific log file format, supply either \u003ccode class=\"literal\"\u003ecsvlog\u003c/code\u003e, \u003ccode class=\"literal\"\u003ejsonlog\u003c/code\u003e or \u003ccode class=\"literal\"\u003estderr\u003c/code\u003e as the value of the optional parameter. The result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the log format requested is not configured in \u003ca class=\"xref\" href=\"/docs/18/runtime-config-logging.html#GUC-LOG-DESTINATION\"\u003elog_destination\u003c/a\u003e. The result reflects the contents of the \u003ccode class=\"filename\"\u003ecurrent_logfiles\u003c/code\u003e file.\u003c/p\u003e\n\u003cp\u003eThis function is restricted to superusers and roles with privileges of the \u003ccode class=\"literal\"\u003epg_monitor\u003c/code\u003e role by default, but other users can be granted EXECUTE to run the function.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_loaded_modules\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003emodule_name\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eversion\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003efile_name\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a list of the loadable modules that are loaded into the current server session. The \u003cem class=\"parameter\"\u003e\u003ccode\u003emodule_name\u003c/code\u003e\u003c/em\u003e and \u003cem class=\"parameter\"\u003e\u003ccode\u003eversion\u003c/code\u003e\u003c/em\u003e fields are NULL unless the module author supplied values for them using the \u003ccode class=\"literal\"\u003ePG_MODULE_MAGIC_EXT\u003c/code\u003e macro. The \u003cem class=\"parameter\"\u003e\u003ccode\u003efile_name\u003c/code\u003e\u003c/em\u003e field gives the file name of the module (shared library).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_my_temp_schema\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003eoid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the current session's temporary schema, or zero if it has none (because it has not created any temporary tables).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_is_other_temp_schema\u003c/code\u003e ( \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if the given OID is the OID of another session's temporary schema. (This can be useful, for example, to exclude other sessions' temporary tables from a catalog display.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_jit_available\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if a JIT compiler extension is available (see \u003ca class=\"xref\" href=\"/docs/18/jit.html\" title=\"Chapter 30. Just-in-Time Compilation (JIT)\"\u003eChapter 30\u003c/a\u003e) and the \u003ca class=\"xref\" href=\"/docs/18/runtime-config-query.html#GUC-JIT\"\u003ejit\u003c/a\u003e configuration parameter is set to \u003ccode class=\"literal\"\u003eon\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_numa_available\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if the server has been compiled with NUMA support.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_listening_channels\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof text\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of names of asynchronous notification channels that the current session is listening to.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_notification_queue_usage\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003edouble precision\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the fraction (0–1) of the asynchronous notification queue's maximum size that is currently occupied by notifications that are waiting to be processed. See \u003ca class=\"xref\" href=\"/docs/18/sql-listen.html\" title=\"LISTEN\"\u003e\u003cspan class=\"refentrytitle\"\u003eLISTEN\u003c/span\u003e\u003c/a\u003e and \u003ca class=\"xref\" href=\"/docs/18/sql-notify.html\" title=\"NOTIFY\"\u003e\u003cspan class=\"refentrytitle\"\u003eNOTIFY\u003c/span\u003e\u003c/a\u003e for more information.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_postmaster_start_time\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the time when the server started.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_safe_snapshot_blocking_pids\u003c/code\u003e ( \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the process ID(s) of the sessions that are blocking the server process with the specified process ID from acquiring a safe snapshot, or an empty array if there is no such server process or it is not blocked.\u003c/p\u003e\n\u003cp\u003eA session running a \u003ccode class=\"literal\"\u003eSERIALIZABLE\u003c/code\u003e transaction blocks a \u003ccode class=\"literal\"\u003eSERIALIZABLE READ ONLY DEFERRABLE\u003c/code\u003e transaction from acquiring a snapshot until the latter determines that it is safe to avoid taking any predicate locks. See \u003ca class=\"xref\" href=\"/docs/18/transaction-iso.html#XACT-SERIALIZABLE\" title=\"13.2.3. Serializable Isolation Level\"\u003eSection 13.2.3\u003c/a\u003e for more information about serializable and deferrable transactions.\u003c/p\u003e\n\u003cp\u003eFrequent calls to this function could have some impact on database performance, because it needs access to the predicate lock manager's shared state for a short time.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_trigger_depth\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current nesting level of \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e triggers (0 if not called, directly or indirectly, from inside a trigger).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003esession_user\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the session user's name.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003esystem_user\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the authentication method and the identity (if any) that the user presented during the authentication cycle before they were assigned a database role. It is represented as \u003ccode class=\"literal\"\u003eauth_method:identity\u003c/code\u003e or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the user has not been authenticated (for example if \u003ca class=\"link\" href=\"/docs/18/auth-trust.html\" title=\"20.4. Trust Authentication\"\u003eTrust authentication\u003c/a\u003e has been used).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003euser\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is equivalent to \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"note\"\u003e\n\u003ch3 class=\"title\"\u003eNote\u003c/h3\u003e\n\u003cp\u003e\u003ccode class=\"function\"\u003ecurrent_catalog\u003c/code\u003e, \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e, \u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e, \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e, \u003ccode class=\"function\"\u003esession_user\u003c/code\u003e, and \u003ccode class=\"function\"\u003euser\u003c/code\u003e have special syntactic status in SQL: they must be called without trailing parentheses. In PostgreSQL, parentheses can optionally be used with \u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e, but not with the others.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003ccode class=\"function\"\u003esession_user\u003c/code\u003e is normally the user who initiated the current database connection; but superusers can change this setting with \u003ca class=\"xref\" href=\"/docs/18/sql-set-session-authorization.html\" title=\"SET SESSION AUTHORIZATION\"\u003e\u003cspan class=\"refentrytitle\"\u003eSET SESSION AUTHORIZATION\u003c/span\u003e\u003c/a\u003e. The \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e is the user identifier that is applicable for permission checking. Normally it is equal to the session user, but it can be changed with \u003ca class=\"xref\" href=\"/docs/18/sql-set-role.html\" title=\"SET ROLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eSET ROLE\u003c/span\u003e\u003c/a\u003e. It also changes during the execution of functions with the attribute \u003ccode class=\"literal\"\u003eSECURITY DEFINER\u003c/code\u003e. In Unix parlance, the session user is the \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ereal user\u003c/span\u003e”\u003c/span\u003e and the current user is the \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003eeffective user\u003c/span\u003e”\u003c/span\u003e. \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e and \u003ccode class=\"function\"\u003euser\u003c/code\u003e are synonyms for \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e. (The SQL standard draws a distinction between \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e and \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e, but \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e does not, since it unifies users and roles into a single kind of entity.)\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-ACCESS\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.2. Access Privilege Inquiry Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE\" title=\"Table 9.72. Access Privilege Inquiry Functions\"\u003eTable 9.72\u003c/a\u003e lists functions that allow querying object access privileges programmatically. (See \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e for more information about privileges.) In these functions, the user whose privileges are being inquired about can be specified by name or by OID (\u003ccode class=\"structname\"\u003epg_authid\u003c/code\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e), or if the name is given as \u003ccode class=\"literal\"\u003epublic\u003c/code\u003e then the privileges of the PUBLIC pseudo-role are checked. Also, the \u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e argument can be omitted entirely, in which case the \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e is assumed. The object that is being inquired about can be specified either by name or by OID, too. When specifying by name, a schema name can be included if relevant. The access privilege of interest is specified by a text string, which must evaluate to one of the appropriate privilege keywords for the object's type (e.g., \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e). Optionally, \u003ccode class=\"literal\"\u003eWITH GRANT OPTION\u003c/code\u003e can be added to a privilege type to test whether the privilege is held with grant option. Also, multiple privilege types can be listed separated by commas, in which case the result will be true if any of the listed privileges is held. (Case of the privilege string is not significant, and extra whitespace is allowed between but not within privilege names.) Some examples:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003eSELECT has_table_privilege('myschema.mytable', 'select');\nSELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');\n\u003c/pre\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-ACCESS-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.72. Access Privilege Inquiry Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_any_column_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for any column of table? This succeeds either if the privilege is held for the whole table, or if there is a column-level grant of the privilege for at least one column. Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eREFERENCES\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_column_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003esmallint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for the specified table column? This succeeds either if the privilege is held for the whole table, or if there is a column-level grant of the privilege for the column. The column can be specified by name or by attribute number (\u003ccode class=\"structname\"\u003epg_attribute\u003c/code\u003e.\u003ccode class=\"structfield\"\u003eattnum\u003c/code\u003e). Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eREFERENCES\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_database_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003edatabase\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for database? Allowable privilege types are \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eCONNECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eTEMPORARY\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eTEMP\u003c/code\u003e (which is equivalent to \u003ccode class=\"literal\"\u003eTEMPORARY\u003c/code\u003e).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_foreign_data_wrapper_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003efdw\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for foreign-data wrapper? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_function_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003efunction\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for function? The only allowable privilege type is \u003ccode class=\"literal\"\u003eEXECUTE\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eWhen specifying a function by name rather than by OID, the allowed input is the same as for the \u003ccode class=\"type\"\u003eregprocedure\u003c/code\u003e data type (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e). An example is:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003e\nSELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_language_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003elanguage\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for language? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_largeobject_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003elargeobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for large object? Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e and \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_parameter_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003eparameter\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for configuration parameter? The parameter name is case-insensitive. Allowable privilege types are \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e and \u003ccode class=\"literal\"\u003eALTER SYSTEM\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_schema_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for schema? Allowable privilege types are \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e and \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_sequence_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003esequence\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for sequence? Allowable privilege types are \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_server_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003eserver\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for foreign server? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_table_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for table? Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eDELETE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eTRUNCATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eREFERENCES\u003c/code\u003e, \u003ccode class=\"literal\"\u003eTRIGGER\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eMAINTAIN\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_tablespace_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for tablespace? The only allowable privilege type is \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_type_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for data type? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e. When specifying a type by name rather than by OID, the allowed input is the same as for the \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e data type (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_has_role\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003erole\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for role? Allowable privilege types are \u003ccode class=\"literal\"\u003eMEMBER\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e. \u003ccode class=\"literal\"\u003eMEMBER\u003c/code\u003e denotes direct or indirect membership in the role without regard to what specific privileges may be conferred. \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e denotes whether the privileges of the role are immediately available without doing \u003ccode class=\"command\"\u003eSET ROLE\u003c/code\u003e, while \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e denotes whether it is possible to change to the role using the \u003ccode class=\"literal\"\u003eSET ROLE\u003c/code\u003e command. \u003ccode class=\"literal\"\u003eWITH ADMIN OPTION\u003c/code\u003e or \u003ccode class=\"literal\"\u003eWITH GRANT OPTION\u003c/code\u003e can be added to any of these privilege types to test whether the \u003ccode class=\"literal\"\u003eADMIN\u003c/code\u003e privilege is held (all six spellings test the same thing). This function does not allow the special case of setting \u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e to \u003ccode class=\"literal\"\u003epublic\u003c/code\u003e, because the PUBLIC pseudo-role can never be a member of real roles.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003erow_security_active\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs row-level security active for the specified table in the context of the current user and current environment?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-ACLITEM-OP-TABLE\" title=\"Table 9.73. aclitem Operators\"\u003eTable 9.73\u003c/a\u003e shows the operators available for the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e type, which is the catalog representation of access privileges. See \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e for information about how to read access privilege values.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-ACLITEM-OP-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.73. \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e Operators\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eOperator\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003cp\u003eExample(s)\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e \u003ccode class=\"literal\"\u003e=\u003c/code\u003e \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAre \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003es equal? (Notice that type \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e lacks the usual set of comparison operators; it has only equality. In turn, \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e arrays can only be compared for equality.)\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003e'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"type\"\u003eaclitem[]\u003c/code\u003e \u003ccode class=\"literal\"\u003e@\u0026gt;\u003c/code\u003e \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes array contain the specified privileges? (This is true if there is an array entry that matches the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e's grantee and grantor, and has at least the specified set of privileges.)\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003e'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @\u0026gt; 'calvin=r*/hobbes'::aclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003et\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-ACLITEM-FN-TABLE\" title=\"Table 9.74. aclitem Functions\"\u003eTable 9.74\u003c/a\u003e shows some additional functions to manage the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e type.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-ACLITEM-FN-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.74. \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eacldefault\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003e\"char\"\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eownerId\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConstructs an \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e array holding the default access privileges for an object of type \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e belonging to the role with OID \u003cem class=\"parameter\"\u003e\u003ccode\u003eownerId\u003c/code\u003e\u003c/em\u003e. This represents the access privileges that will be assumed when an object's ACL entry is null. (The default access privileges are described in \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e.) The \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e parameter must be one of 'c' for \u003ccode class=\"literal\"\u003eCOLUMN\u003c/code\u003e, 'r' for \u003ccode class=\"literal\"\u003eTABLE\u003c/code\u003e and table-like objects, 's' for \u003ccode class=\"literal\"\u003eSEQUENCE\u003c/code\u003e, 'd' for \u003ccode class=\"literal\"\u003eDATABASE\u003c/code\u003e, 'f' for \u003ccode class=\"literal\"\u003eFUNCTION\u003c/code\u003e or \u003ccode class=\"literal\"\u003ePROCEDURE\u003c/code\u003e, 'l' for \u003ccode class=\"literal\"\u003eLANGUAGE\u003c/code\u003e, 'L' for \u003ccode class=\"literal\"\u003eLARGE OBJECT\u003c/code\u003e, 'n' for \u003ccode class=\"literal\"\u003eSCHEMA\u003c/code\u003e, 'p' for \u003ccode class=\"literal\"\u003ePARAMETER\u003c/code\u003e, 't' for \u003ccode class=\"literal\"\u003eTABLESPACE\u003c/code\u003e, 'F' for \u003ccode class=\"literal\"\u003eFOREIGN DATA WRAPPER\u003c/code\u003e, 'S' for \u003ccode class=\"literal\"\u003eFOREIGN SERVER\u003c/code\u003e, or 'T' for \u003ccode class=\"literal\"\u003eTYPE\u003c/code\u003e or \u003ccode class=\"literal\"\u003eDOMAIN\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eaclexplode\u003c/code\u003e ( \u003ccode class=\"type\"\u003eaclitem[]\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantor\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege_type\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_grantable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e array as a set of rows. If the grantee is the pseudo-role PUBLIC, it is represented by zero in the \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e column. Each granted privilege is represented as \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, etc (see \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html#PRIVILEGE-ABBREVS-TABLE\" title=\"Table 5.1. ACL Privilege Abbreviations\"\u003eTable 5.1\u003c/a\u003e for a full list). Note that each privilege is broken out as a separate row, so only one keyword appears in the \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege_type\u003c/code\u003e\u003c/em\u003e column.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003emakeaclitem\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantor\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivileges\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_grantable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eaclitem\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConstructs an \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e with the given properties. \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivileges\u003c/code\u003e\u003c/em\u003e is a comma-separated list of privilege names such as \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, etc, all of which are set in the result. (Case of the privilege string is not significant, and extra whitespace is allowed between but not within privilege names.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-SCHEMA\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.3. Schema Visibility Inquiry Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-SCHEMA-TABLE\" title=\"Table 9.75. Schema Visibility Inquiry Functions\"\u003eTable 9.75\u003c/a\u003e shows functions that determine whether a certain object is \u003cem class=\"firstterm\"\u003evisible\u003c/em\u003e in the current schema search path. For example, a table is said to be visible if its containing schema is in the search path and no table of the same name appears earlier in the search path. This is equivalent to the statement that the table can be referenced by name without explicit schema qualification. Thus, to list the names of all visible tables:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003eSELECT relname FROM pg_class WHERE pg_table_is_visible(oid);\n\u003c/pre\u003e\n\u003cp\u003eFor functions and operators, an object in the search path is said to be visible if there is no object of the same name \u003cspan class=\"emphasis\"\u003e\u003cem\u003eand argument data type(s)\u003c/em\u003e\u003c/span\u003e earlier in the path. For operator classes and families, both the name and the associated index access method are considered.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-SCHEMA-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.75. Schema Visibility Inquiry Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_collation_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs collation visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_conversion_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003econversion\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs conversion visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_function_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunction\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs function visible in search path? (This also works for procedures and aggregates.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_opclass_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eopclass\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator class visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_operator_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eoperator\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_opfamily_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eopclass\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator family visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_statistics_obj_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estat\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs statistics object visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_table_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs table visible in search path? (This works for all types of relations, including views, materialized views, indexes, sequences and foreign tables.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_config_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003econfig\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search configuration visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_dict_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search dictionary visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_parser_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eparser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search parser visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_template_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etemplate\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search template visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_type_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs type (or domain) visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eAll these functions require object OIDs to identify the object to be checked. If you want to test an object by name, it is convenient to use the OID alias types (\u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e, \u003ccode class=\"type\"\u003eregprocedure\u003c/code\u003e, \u003ccode class=\"type\"\u003eregoperator\u003c/code\u003e, \u003ccode class=\"type\"\u003eregconfig\u003c/code\u003e, or \u003ccode class=\"type\"\u003eregdictionary\u003c/code\u003e), for example:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003eSELECT pg_type_is_visible('myschema.widget'::regtype);\n\u003c/pre\u003e\n\u003cp\u003eNote that it would not make much sense to test a non-schema-qualified type name in this way — if the name can be recognized at all, it must be visible.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-CATALOG\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.4. System Catalog Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE\" title=\"Table 9.76. System Catalog Information Functions\"\u003eTable 9.76\u003c/a\u003e lists functions that extract information from the system catalogs.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-CATALOG-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.76. System Catalog Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"FORMAT-TYPE\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eformat_type\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etypemod\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the SQL name for a data type that is identified by its type OID and possibly a type modifier. Pass NULL for the type modifier if no specific modifier is known.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_basetype\u003c/code\u003e ( \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the base type of a domain identified by its type OID. If the argument is the OID of a non-domain type, returns the argument as-is. Returns NULL if the argument is not a valid type OID. If there's a chain of domain dependencies, it will recurse until finding the base type.\u003c/p\u003e\n\u003cp\u003eAssuming \u003ccode class=\"literal\"\u003eCREATE DOMAIN mytext AS text\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_basetype('mytext'::regtype)\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"PG-CHAR-TO-ENCODING\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_char_to_encoding\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConverts the supplied encoding name into an integer representing the internal identifier used in some system catalog tables. Returns \u003ccode class=\"literal\"\u003e-1\u003c/code\u003e if an unknown encoding name is provided.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"PG-ENCODING-TO-CHAR\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_encoding_to_char\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConverts the integer used as the internal identifier of an encoding in some system catalog tables into a human-readable string. Returns an empty string if an invalid encoding number is provided.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_catalog_foreign_keys\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efktable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003efkcols\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epktable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epkcols\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_array\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_opt\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a set of records describing the foreign key relationships that exist within the \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e system catalogs. The \u003cem class=\"parameter\"\u003e\u003ccode\u003efktable\u003c/code\u003e\u003c/em\u003e column contains the name of the referencing catalog, and the \u003cem class=\"parameter\"\u003e\u003ccode\u003efkcols\u003c/code\u003e\u003c/em\u003e column contains the name(s) of the referencing column(s). Similarly, the \u003cem class=\"parameter\"\u003e\u003ccode\u003epktable\u003c/code\u003e\u003c/em\u003e column contains the name of the referenced catalog, and the \u003cem class=\"parameter\"\u003e\u003ccode\u003epkcols\u003c/code\u003e\u003c/em\u003e column contains the name(s) of the referenced column(s). If \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_array\u003c/code\u003e\u003c/em\u003e is true, the last referencing column is an array, each of whose elements should match some entry in the referenced catalog. If \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_opt\u003c/code\u003e\u003c/em\u003e is true, the referencing column(s) are allowed to contain zeroes instead of a valid reference.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_constraintdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003econstraint\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a constraint. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_expr\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eexpr\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_node_tree\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003erelation\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDecompiles the internal form of an expression stored in the system catalogs, such as the default value for a column. If the expression might contain Vars, specify the OID of the relation they refer to as the second parameter; if no Vars are expected, passing zero is sufficient.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_functiondef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a function or procedure. (This is a decompiled reconstruction, not the original text of the command.) The result is a complete \u003ccode class=\"command\"\u003eCREATE OR REPLACE FUNCTION\u003c/code\u003e or \u003ccode class=\"command\"\u003eCREATE OR REPLACE PROCEDURE\u003c/code\u003e statement.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_function_arguments\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the argument list of a function or procedure, in the form it would need to appear in within \u003ccode class=\"command\"\u003eCREATE FUNCTION\u003c/code\u003e (including default values).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_function_identity_arguments\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the argument list necessary to identify a function or procedure, in the form it would need to appear in within commands such as \u003ccode class=\"command\"\u003eALTER FUNCTION\u003c/code\u003e. This form omits default values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_function_result\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the \u003ccode class=\"literal\"\u003eRETURNS\u003c/code\u003e clause of a function, in the form it would need to appear in within \u003ccode class=\"command\"\u003eCREATE FUNCTION\u003c/code\u003e. Returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e for a procedure.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_indexdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for an index. (This is a decompiled reconstruction, not the original text of the command.) If \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e is supplied and is not zero, only the definition of that column is reconstructed.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_keywords\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eword\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatcode\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003e\"char\"\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ebarelabel\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatdesc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ebaredesc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a set of records describing the SQL keywords recognized by the server. The \u003cem class=\"parameter\"\u003e\u003ccode\u003eword\u003c/code\u003e\u003c/em\u003e column contains the keyword. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatcode\u003c/code\u003e\u003c/em\u003e column contains a category code: \u003ccode class=\"literal\"\u003eU\u003c/code\u003e for an unreserved keyword, \u003ccode class=\"literal\"\u003eC\u003c/code\u003e for a keyword that can be a column name, \u003ccode class=\"literal\"\u003eT\u003c/code\u003e for a keyword that can be a type or function name, or \u003ccode class=\"literal\"\u003eR\u003c/code\u003e for a fully reserved keyword. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ebarelabel\u003c/code\u003e\u003c/em\u003e column contains \u003ccode class=\"literal\"\u003etrue\u003c/code\u003e if the keyword can be used as a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ebare\u003c/span\u003e”\u003c/span\u003e column label in \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e lists, or \u003ccode class=\"literal\"\u003efalse\u003c/code\u003e if it can only be used after \u003ccode class=\"literal\"\u003eAS\u003c/code\u003e. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatdesc\u003c/code\u003e\u003c/em\u003e column contains a possibly-localized string describing the keyword's category. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ebaredesc\u003c/code\u003e\u003c/em\u003e column contains a possibly-localized string describing the keyword's column label status.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_partition_constraintdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the definition of a partition constraint. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_partkeydef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the definition of a partitioned table's partition key, in the form it would have in the \u003ccode class=\"literal\"\u003ePARTITION BY\u003c/code\u003e clause of \u003ccode class=\"command\"\u003eCREATE TABLE\u003c/code\u003e. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_ruledef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003erule\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a rule. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_serial_sequence\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the sequence associated with a column, or NULL if no sequence is associated with the column. If the column is an identity column, the associated sequence is the sequence internally created for that column. For columns created using one of the serial types (\u003ccode class=\"type\"\u003eserial\u003c/code\u003e, \u003ccode class=\"type\"\u003esmallserial\u003c/code\u003e, \u003ccode class=\"type\"\u003ebigserial\u003c/code\u003e), it is the sequence created for that serial column definition. In the latter case, the association can be modified or removed with \u003ccode class=\"command\"\u003eALTER SEQUENCE OWNED BY\u003c/code\u003e. (This function probably should have been called \u003ccode class=\"function\"\u003epg_get_owned_sequence\u003c/code\u003e; its current name reflects the fact that it has historically been used with serial-type columns.) The first parameter is a table name with optional schema, and the second parameter is a column name. Because the first parameter potentially contains both schema and table names, it is parsed per usual SQL rules, meaning it is lower-cased by default. The second parameter, being just a column name, is treated literally and so has its case preserved. The result is suitably formatted for passing to the sequence functions (see \u003ca class=\"xref\" href=\"/docs/18/functions-sequence.html\" title=\"9.17. Sequence Manipulation Functions\"\u003eSection 9.17\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eA typical use is in reading the current value of the sequence for an identity or serial column, for example:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003e\nSELECT currval(pg_get_serial_sequence('sometable', 'id'));\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_statisticsobjdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estatobj\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for an extended statistics object. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_triggerdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etrigger\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a trigger. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_userbyid\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003erole\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a role's name given its OID.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_viewdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e command for a view or materialized view. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003epg_get_viewdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ewrap_column\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e command for a view or materialized view. (This is a decompiled reconstruction, not the original text of the command.) In this form of the function, pretty-printing is always enabled, and long lines are wrapped to try to keep them shorter than the specified number of columns.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003epg_get_viewdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e command for a view or materialized view, working from a textual name for the view rather than its OID. (This is deprecated; use the OID variant instead.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_index_column_has_property\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index column has the named property. Common index column properties are listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEX-COLUMN-PROPS\" title=\"Table 9.77. Index Column Properties\"\u003eTable 9.77\u003c/a\u003e. (Note that extension access methods can define additional property names for their indexes.) \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID or column number does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_index_has_property\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index has the named property. Common index properties are listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEX-PROPS\" title=\"Table 9.78. Index Properties\"\u003eTable 9.78\u003c/a\u003e. (Note that extension access methods can define additional property names for their indexes.) \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_indexam_has_property\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eam\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index access method has the named property. Access method properties are listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEXAM-PROPS\" title=\"Table 9.79. Index Access Method Properties\"\u003eTable 9.79\u003c/a\u003e. \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_options_to_table\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eoptions_array\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eoption_name\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eoption_value\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the set of storage options represented by a value from \u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e.\u003ccode class=\"structfield\"\u003ereloptions\u003c/code\u003e or \u003ccode class=\"structname\"\u003epg_attribute\u003c/code\u003e.\u003ccode class=\"structfield\"\u003eattoptions\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_settings_get_flags\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eguc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the flags associated with the given GUC, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if it does not exist. The result is an empty array if the GUC exists but there are no flags to show. Only the most useful flags listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SETTINGS-FLAGS\" title=\"Table 9.80. GUC Flags\"\u003eTable 9.80\u003c/a\u003e are exposed.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_tablespace_databases\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof oid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of OIDs of databases that have objects stored in the specified tablespace. If this function returns any rows, the tablespace is not empty and cannot be dropped. To identify the specific objects populating the tablespace, you will need to connect to the database(s) identified by \u003ccode class=\"function\"\u003epg_tablespace_databases\u003c/code\u003e and query their \u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e catalogs.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_tablespace_location\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the file system path that this tablespace is located in.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_typeof\u003c/code\u003e ( \u003ccode class=\"type\"\u003e\"any\"\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the data type of the value that is passed to it. This can be helpful for troubleshooting or dynamically constructing SQL queries. The function is declared as returning \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e, which is an OID alias type (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); this means that it is the same as an OID for comparison purposes but displays as a type name.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_typeof(33)\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eCOLLATION FOR\u003c/code\u003e ( \u003ccode class=\"type\"\u003e\"any\"\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the collation of the value that is passed to it. The value is quoted and schema-qualified if necessary. If no collation was derived for the argument expression, then \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned. If the argument is not of a collatable data type, then an error is raised.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ecollation for ('foo'::text)\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003e\"default\"\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ecollation for ('foo' COLLATE \"de_DE\")\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003e\"de_DE\"\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regclass\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregclass\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual relation name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regcollation\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregcollation\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual collation name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregcollation\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regnamespace\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregnamespace\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual schema name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregnamespace\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regoper\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregoper\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual operator name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregoper\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found or is ambiguous.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regoperator\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregoperator\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual operator name (with parameter types) to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregoperator\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regproc\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregproc\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual function or procedure name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found or is ambiguous.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regprocedure\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregprocedure\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual function or procedure name (with argument types) to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregprocedure\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regrole\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregrole\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual role name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregrole\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"TO-REGTYPE\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regtype\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a string of text, extracts a potential type name from it, and translates that name into a type OID. A syntax error in the string will result in an error; but if the string is a syntactically valid type name that happens not to be found in the catalogs, the result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e), except that that will throw error for name not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regtypemod\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a string of text, extracts a potential type name from it, and translates its type modifier, if any. A syntax error in the string will result in an error; but if the string is a syntactically valid type name that happens not to be found in the catalogs, the result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e. The result is \u003ccode class=\"literal\"\u003e-1\u003c/code\u003e if no type modifier is present.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"function\"\u003eto_regtypemod\u003c/code\u003e can be combined with \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#TO-REGTYPE\"\u003eto_regtype\u003c/a\u003e to produce appropriate inputs for \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FORMAT-TYPE\"\u003eformat_type\u003c/a\u003e, allowing a string representing a type name to be canonicalized.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003eformat_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)'))\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003echaracter varying(32)\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eMost of the functions that reconstruct (decompile) database objects have an optional \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e flag, which if \u003ccode class=\"literal\"\u003etrue\u003c/code\u003e causes the result to be \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003epretty-printed\u003c/span\u003e”\u003c/span\u003e. Pretty-printing suppresses unnecessary parentheses and adds whitespace for legibility. The pretty-printed format is more readable, but the default format is more likely to be interpreted the same way by future versions of \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e; so avoid using pretty-printed output for dump purposes. Passing \u003ccode class=\"literal\"\u003efalse\u003c/code\u003e for the \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e parameter yields the same result as omitting the parameter.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-INDEX-COLUMN-PROPS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.77. Index Column Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003easc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort in ascending order on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003edesc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort in descending order on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003enulls_first\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort with nulls first on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003enulls_last\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort with nulls last on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eorderable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column possess any defined sort ordering?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003edistance_orderable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the column be scanned in order by a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003edistance\u003c/span\u003e”\u003c/span\u003e operator, for example \u003ccode class=\"literal\"\u003eORDER BY col \u0026lt;-\u0026gt; constant\u003c/code\u003e ?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ereturnable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the column value be returned by an index-only scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003esearch_array\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column natively support \u003ccode class=\"literal\"\u003ecol = ANY(array)\u003c/code\u003e searches?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003esearch_nulls\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column support \u003ccode class=\"literal\"\u003eIS NULL\u003c/code\u003e and \u003ccode class=\"literal\"\u003eIS NOT NULL\u003c/code\u003e searches?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-INDEX-PROPS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.78. Index Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eclusterable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the index be used in a \u003ccode class=\"literal\"\u003eCLUSTER\u003c/code\u003e command?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eindex_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the index support plain (non-bitmap) scans?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ebitmap_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the index support bitmap scans?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ebackward_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the scan direction be changed in mid-scan (to support \u003ccode class=\"literal\"\u003eFETCH BACKWARD\u003c/code\u003e on a cursor without needing materialization)?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-INDEXAM-PROPS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.79. Index Access Method Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_order\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support \u003ccode class=\"literal\"\u003eASC\u003c/code\u003e, \u003ccode class=\"literal\"\u003eDESC\u003c/code\u003e and related keywords in \u003ccode class=\"literal\"\u003eCREATE INDEX\u003c/code\u003e?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_unique\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support unique indexes?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_multi_col\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support indexes with multiple columns?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_exclude\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support exclusion constraints?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_include\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support the \u003ccode class=\"literal\"\u003eINCLUDE\u003c/code\u003e clause of \u003ccode class=\"literal\"\u003eCREATE INDEX\u003c/code\u003e?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-SETTINGS-FLAGS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.80. GUC Flags\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFlag\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eEXPLAIN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are included in \u003ccode class=\"command\"\u003eEXPLAIN (SETTINGS)\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNO_SHOW_ALL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are excluded from \u003ccode class=\"command\"\u003eSHOW ALL\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNO_RESET\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag do not support \u003ccode class=\"command\"\u003eRESET\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNO_RESET_ALL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are excluded from \u003ccode class=\"command\"\u003eRESET ALL\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNOT_IN_SAMPLE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are not included in \u003ccode class=\"filename\"\u003epostgresql.conf\u003c/code\u003e by default.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eRUNTIME_COMPUTED\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are runtime-computed ones.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-OBJECT\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.5. Object Information and Addressing Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-OBJECT-TABLE\" title=\"Table 9.81. Object Information and Addressing Functions\"\u003eTable 9.81\u003c/a\u003e lists functions related to database object identification and addressing.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-OBJECT-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.81. Object Information and Addressing Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_acl\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the ACL for a database object, specified by catalog OID, object OID and sub-object ID. This function returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values for undefined objects.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_describe_object\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a textual description of a database object identified by catalog OID, object OID, and sub-object ID (such as a column number within a table; the sub-object ID is zero when referring to a whole object). This description is intended to be human-readable, and might be translated, depending on server configuration. This is especially useful to determine the identity of an object referenced in the \u003ccode class=\"structname\"\u003epg_depend\u003c/code\u003e catalog. This function returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values for undefined objects.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_identify_object\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eidentity\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by catalog OID, object OID and sub-object ID. This information is intended to be machine-readable, and is never translated. \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e identifies the type of database object; \u003cem class=\"parameter\"\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e is the schema name that the object belongs in, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e for object types that do not belong to schemas; \u003cem class=\"parameter\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e is the name of the object, quoted if necessary, if the name (along with schema name, if pertinent) is sufficient to uniquely identify the object, otherwise \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e; \u003cem class=\"parameter\"\u003e\u003ccode\u003eidentity\u003c/code\u003e\u003c/em\u003e is the complete object identity, with the precise format depending on object type, and each name within the format being schema-qualified and quoted as necessary. Undefined objects are identified with \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_identify_object_as_address\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by catalog OID, object OID and sub-object ID. The returned information is independent of the current server, that is, it could be used to identify an identically named object in another server. \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e identifies the type of database object; \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e and \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e are text arrays that together form a reference to the object. These three values can be passed to \u003ccode class=\"function\"\u003epg_get_object_address\u003c/code\u003e to obtain the internal address of the object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_object_address\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by a type code and object name and argument arrays. The returned values are the ones that would be used in system catalogs such as \u003ccode class=\"structname\"\u003epg_depend\u003c/code\u003e; they can be passed to other system functions such as \u003ccode class=\"function\"\u003epg_describe_object\u003c/code\u003e or \u003ccode class=\"function\"\u003epg_identify_object\u003c/code\u003e. \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e is the OID of the system catalog containing the object; \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e is the OID of the object itself, and \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e is the sub-object ID, or zero if none. This function is the inverse of \u003ccode class=\"function\"\u003epg_identify_object_as_address\u003c/code\u003e. Undefined objects are identified with \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003e\u003ccode class=\"function\"\u003epg_get_acl\u003c/code\u003e is useful for retrieving and inspecting the privileges associated with database objects without looking at specific catalogs. For example, to retrieve all the granted privileges on objects in the current database:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003epostgres=# SELECT\n    (pg_identify_object(s.classid,s.objid,s.objsubid)).*,\n    pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl\nFROM pg_catalog.pg_shdepend AS s\nJOIN pg_catalog.pg_database AS d\n    ON d.datname = current_database() AND\n       d.oid = s.dbid\nJOIN pg_catalog.pg_authid AS a\n    ON a.oid = s.refobjid AND\n       s.refclassid = 'pg_authid'::regclass\nWHERE s.deptype = 'a';\n-[ RECORD 1 ]-----------------------------------------\ntype     | table\nschema   | public\nname     | testtab\nidentity | public.testtab\nacl      | {postgres=arwdDxtm/postgres,foo=r/postgres}\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-COMMENT\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.6. Comment Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\" title=\"Table 9.82. Comment Information Functions\"\u003eTable 9.82\u003c/a\u003e extract comments previously stored with the \u003ca class=\"xref\" href=\"/docs/18/sql-comment.html\" title=\"COMMENT\"\u003e\u003cspan class=\"refentrytitle\"\u003eCOMMENT\u003c/span\u003e\u003c/a\u003e command. A null value is returned if no comment could be found for the specified parameters.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-COMMENT-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.82. Comment Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecol_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a table column, which is specified by the OID of its table and its column number. (\u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e cannot be used for table columns, since columns do not have OIDs of their own.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatalog\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a database object specified by its OID and the name of the containing system catalog. For example, \u003ccode class=\"literal\"\u003eobj_description(123456, 'pg_class')\u003c/code\u003e would retrieve the comment for the table with OID 123456.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a database object specified by its OID alone. This is \u003cspan class=\"emphasis\"\u003e\u003cem\u003edeprecated\u003c/em\u003e\u003c/span\u003e since there is no guarantee that OIDs are unique across different system catalogs; therefore, the wrong comment might be returned.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eshobj_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatalog\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a shared database object specified by its OID and the name of the containing system catalog. This is just like \u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e except that it is used for retrieving comments on shared objects (that is, databases, roles, and tablespaces). Some system catalogs are global to all databases within each cluster, and the descriptions for objects in them are stored globally as well.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-VALIDITY\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.7. Data Validity Checking Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-VALIDITY-TABLE\" title=\"Table 9.83. Data Validity Checking Functions\"\u003eTable 9.83\u003c/a\u003e can be helpful for checking validity of proposed input data.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-VALIDITY-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.83. Data Validity Checking Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003cp\u003eExample(s)\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_input_is_valid\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether the given \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e is valid input for the specified data type, returning true or false.\u003c/p\u003e\n\u003cp\u003eThis function will only work as desired if the data type's input function has been updated to report invalid input as a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003esoft\u003c/span\u003e”\u003c/span\u003e error. Otherwise, invalid input will abort the transaction, just as if the string had been cast to the type directly.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_input_is_valid('42', 'integer')\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003et\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_input_is_valid('42000000000', 'integer')\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_input_is_valid('1234.567', 'numeric(7,4)')\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_input_error_info\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003emessage\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003edetail\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ehint\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003esql_error_code\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eTests whether the given \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e is valid input for the specified data type; if not, return the details of the error that would have been thrown. If the input is valid, the results are NULL. The inputs are the same as for \u003ccode class=\"function\"\u003epg_input_is_valid\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThis function will only work as desired if the data type's input function has been updated to report invalid input as a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003esoft\u003c/span\u003e”\u003c/span\u003e error. Otherwise, invalid input will abort the transaction, just as if the string had been cast to the type directly.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003eSELECT * FROM pg_input_error_info('42000000000', 'integer')\u003c/code\u003e →\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003e\n                       message                        | detail | hint | sql_error_code\n------------------------------------------------------+--------+------+----------------\n value \"42000000000\" is out of range for type integer |        |      | 22003\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-SNAPSHOT\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.8. Transaction ID and Snapshot Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT\" title=\"Table 9.84. Transaction ID and Snapshot Information Functions\"\u003eTable 9.84\u003c/a\u003e provide server transaction information in an exportable form. The main use of these functions is to determine which transactions were committed between two snapshots.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-SNAPSHOT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.84. Transaction ID and Snapshot Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eage\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the number of transactions between the supplied transaction id and the current transaction counter.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003emxid_age\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the number of multixacts IDs between the supplied multixact ID and the current multixacts counter.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_current_xact_id\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current transaction's ID. It will assign a new one if the current transaction does not have one already (because it has not performed any database updates); see \u003ca class=\"xref\" href=\"/docs/18/transaction-id.html\" title=\"67.1. Transactions and Identifiers\"\u003eSection 67.1\u003c/a\u003e for details. If executed in a subtransaction, this will return the top-level transaction ID; see \u003ca class=\"xref\" href=\"/docs/18/subxacts.html\" title=\"67.3. Subtransactions\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_current_xact_id_if_assigned\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current transaction's ID, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if no ID is assigned yet. (It's best to use this variant if the transaction might otherwise be read-only, to avoid unnecessary consumption of an XID.) If executed in a subtransaction, this will return the top-level transaction ID.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_xact_status\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid8\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReports the commit status of a recent transaction. The result is one of \u003ccode class=\"literal\"\u003ein progress\u003c/code\u003e, \u003ccode class=\"literal\"\u003ecommitted\u003c/code\u003e, or \u003ccode class=\"literal\"\u003eaborted\u003c/code\u003e, provided that the transaction is recent enough that the system retains the commit status of that transaction. If it is old enough that no references to the transaction survive in the system and the commit status information has been discarded, the result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e. Applications might use this function, for example, to determine whether their transaction committed or aborted after the application and database server become disconnected while a \u003ccode class=\"literal\"\u003eCOMMIT\u003c/code\u003e is in progress. Note that prepared transactions are reported as \u003ccode class=\"literal\"\u003ein progress\u003c/code\u003e; applications must check \u003ca class=\"link\" href=\"/docs/18/view-pg-prepared-xacts.html\" title=\"53.17. pg_prepared_xacts\"\u003e\u003ccode class=\"structname\"\u003epg_prepared_xacts\u003c/code\u003e\u003c/a\u003e if they need to determine whether a transaction ID belongs to a prepared transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_current_snapshot\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003epg_snapshot\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a current \u003cem class=\"firstterm\"\u003esnapshot\u003c/em\u003e, a data structure showing which transaction IDs are now in-progress. Only top-level transaction IDs are included in the snapshot; subtransaction IDs are not shown; see \u003ca class=\"xref\" href=\"/docs/18/subxacts.html\" title=\"67.3. Subtransactions\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_snapshot_xip\u003c/code\u003e ( \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof xid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of in-progress transaction IDs contained in a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_snapshot_xmax\u003c/code\u003e ( \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode class=\"structfield\"\u003exmax\u003c/code\u003e of a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_snapshot_xmin\u003c/code\u003e ( \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode class=\"structfield\"\u003exmin\u003c/code\u003e of a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_visible_in_snapshot\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid8\u003c/code\u003e, \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs the given transaction ID \u003cem class=\"firstterm\"\u003evisible\u003c/em\u003e according to this snapshot (that is, was it completed before the snapshot was taken)? Note that this function will not give the correct answer for a subtransaction ID (subxid); see \u003ca class=\"xref\" href=\"/docs/18/subxacts.html\" title=\"67.3. Subtransactions\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_multixact_members\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003emultixid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003exid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003emode\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the transaction ID and lock mode for each member of the specified multixact ID. The lock modes \u003ccode class=\"literal\"\u003eforupd\u003c/code\u003e, \u003ccode class=\"literal\"\u003efornokeyupd\u003c/code\u003e, \u003ccode class=\"literal\"\u003esh\u003c/code\u003e, and \u003ccode class=\"literal\"\u003ekeysh\u003c/code\u003e correspond to the row-level locks \u003ccode class=\"literal\"\u003eFOR UPDATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eFOR NO KEY UPDATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eFOR SHARE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eFOR KEY SHARE\u003c/code\u003e, respectively, as described in \u003ca class=\"xref\" href=\"/docs/18/explicit-locking.html#LOCKING-ROWS\" title=\"13.3.2. Row-Level Locks\"\u003eSection 13.3.2\u003c/a\u003e. Two additional modes are specific to multixacts: \u003ccode class=\"literal\"\u003enokeyupd\u003c/code\u003e, used by updates that do not modify key columns, and \u003ccode class=\"literal\"\u003eupd\u003c/code\u003e, used by updates or deletes that modify key columns.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eThe internal transaction ID type \u003ccode class=\"type\"\u003exid\u003c/code\u003e is 32 bits wide and wraps around every 4 billion transactions. However, the functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT\" title=\"Table 9.84. Transaction ID and Snapshot Information Functions\"\u003eTable 9.84\u003c/a\u003e, except \u003ccode class=\"function\"\u003eage\u003c/code\u003e, \u003ccode class=\"function\"\u003emxid_age\u003c/code\u003e, and \u003ccode class=\"function\"\u003epg_get_multixact_members\u003c/code\u003e, use a 64-bit type \u003ccode class=\"type\"\u003exid8\u003c/code\u003e that does not wrap around during the life of an installation and can be converted to \u003ccode class=\"type\"\u003exid\u003c/code\u003e by casting if required; see \u003ca class=\"xref\" href=\"/docs/18/transaction-id.html\" title=\"67.1. Transactions and Identifiers\"\u003eSection 67.1\u003c/a\u003e for details. The data type \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e stores information about transaction ID visibility at a particular moment in time. Its components are described in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT-PARTS\" title=\"Table 9.85. Snapshot Components\"\u003eTable 9.85\u003c/a\u003e. \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e's textual representation is \u003ccode class=\"literal\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003exmin\u003c/code\u003e\u003c/em\u003e:\u003cem class=\"replaceable\"\u003e\u003ccode\u003exmax\u003c/code\u003e\u003c/em\u003e:\u003cem class=\"replaceable\"\u003e\u003ccode\u003exip_list\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e. For example \u003ccode class=\"literal\"\u003e10:20:10,14,15\u003c/code\u003e means \u003ccode class=\"literal\"\u003exmin=10, xmax=20, xip_list=10, 14, 15\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-SNAPSHOT-PARTS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.85. Snapshot Components\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003exmin\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLowest transaction ID that was still active. All transaction IDs less than \u003ccode class=\"structfield\"\u003exmin\u003c/code\u003e are either committed and visible, or rolled back and dead.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003exmax\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOne past the highest completed transaction ID. All transaction IDs greater than or equal to \u003ccode class=\"structfield\"\u003exmax\u003c/code\u003e had not yet completed as of the time of the snapshot, and thus are invisible.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003exip_list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTransactions in progress at the time of the snapshot. A transaction ID that is \u003ccode class=\"literal\"\u003exmin \u0026lt;= \u003cem class=\"replaceable\"\u003e\u003ccode\u003eX\u003c/code\u003e\u003c/em\u003e \u0026lt; xmax\u003c/code\u003e and not in this list was already completed at the time of the snapshot, and thus is either visible or dead according to its commit status. This list does not include the transaction IDs of subtransactions (subxids).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eIn releases of \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e before 13 there was no \u003ccode class=\"type\"\u003exid8\u003c/code\u003e type, so variants of these functions were provided that used \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e to represent a 64-bit XID, with a correspondingly distinct snapshot data type \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e. These older functions have \u003ccode class=\"literal\"\u003etxid\u003c/code\u003e in their names. They are still supported for backward compatibility, but may be removed from a future release. See \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-TXID-SNAPSHOT\" title=\"Table 9.86. Deprecated Transaction ID and Snapshot Information Functions\"\u003eTable 9.86\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-TXID-SNAPSHOT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.86. Deprecated Transaction ID and Snapshot Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_current\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_current_xact_id()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_current_if_assigned\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_current_xact_id_if_assigned()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_current_snapshot\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etxid_snapshot\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_current_snapshot()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_snapshot_xip\u003c/code\u003e ( \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof bigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_snapshot_xip()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_snapshot_xmax\u003c/code\u003e ( \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_snapshot_xmax()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_snapshot_xmin\u003c/code\u003e ( \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_snapshot_xmin()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_visible_in_snapshot\u003c/code\u003e ( \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_visible_in_snapshot()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_status\u003c/code\u003e ( \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_xact_status()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-COMMIT-TIMESTAMP\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.9. Committed Transaction Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-COMMIT-TIMESTAMP\" title=\"Table 9.87. Committed Transaction Information Functions\"\u003eTable 9.87\u003c/a\u003e provide information about when past transactions were committed. They only provide useful data when the \u003ca class=\"xref\" href=\"/docs/18/runtime-config-replication.html#GUC-TRACK-COMMIT-TIMESTAMP\"\u003etrack_commit_timestamp\u003c/a\u003e configuration option is enabled, and only for transactions that were committed after it was enabled. Commit timestamp information is routinely removed during vacuum.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-COMMIT-TIMESTAMP\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.87. Committed Transaction Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_xact_commit_timestamp\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the commit timestamp of a transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_xact_commit_timestamp_origin\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etimestamp\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eroident\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eReturns the commit timestamp and replication origin of a transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_last_committed_xact\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003exid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etimestamp\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eroident\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the transaction ID, commit timestamp and replication origin of the latest committed transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-CONTROLDATA\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.10. Control Data Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-CONTROLDATA\" title=\"Table 9.88. Control Data Functions\"\u003eTable 9.88\u003c/a\u003e print information initialized during \u003ccode class=\"command\"\u003einitdb\u003c/code\u003e, such as the catalog version. They also show information about write-ahead logging and checkpoint processing. This information is cluster-wide, not specific to any one database. These functions provide most of the same information, from the same source, as the \u003ca class=\"xref\" href=\"/docs/18/app-pgcontroldata.html\" title=\"pg_controldata\"\u003e\u003cspan class=\"refentrytitle\"\u003e\u003cspan class=\"application\"\u003epg_controldata\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e application.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-CONTROLDATA\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.88. Control Data Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_checkpoint\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about current checkpoint state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-CHECKPOINT\" title=\"Table 9.89. pg_control_checkpoint Output Columns\"\u003eTable 9.89\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_system\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about current control file state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-SYSTEM\" title=\"Table 9.90. pg_control_system Output Columns\"\u003eTable 9.90\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_init\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about cluster initialization state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-INIT\" title=\"Table 9.91. pg_control_init Output Columns\"\u003eTable 9.91\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_recovery\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about recovery state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-RECOVERY\" title=\"Table 9.92. pg_control_recovery Output Columns\"\u003eTable 9.92\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-CHECKPOINT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.89. \u003ccode class=\"function\"\u003epg_control_checkpoint\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003echeckpoint_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eredo_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eredo_wal_file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003etimeline_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eprev_timeline_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003efull_page_writes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_oid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_multixact_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_multi_offset\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_xid_dbid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_active_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_multi_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_multi_dbid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_commit_ts_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enewest_commit_ts_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003echeckpoint_time\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-SYSTEM\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.90. \u003ccode class=\"function\"\u003epg_control_system\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003epg_control_version\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ecatalog_version_no\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003esystem_identifier\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003ebigint\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003epg_control_last_modified\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-INIT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.91. \u003ccode class=\"function\"\u003epg_control_init\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_data_alignment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003edatabase_block_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eblocks_per_segment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ewal_block_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ebytes_per_wal_segment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_identifier_length\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_index_columns\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_toast_chunk_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003elarge_object_chunk_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003efloat8_pass_by_value\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003edata_page_checksum_version\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003edefault_char_signedness\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-RECOVERY\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.92. \u003ccode class=\"function\"\u003epg_control_recovery\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emin_recovery_end_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emin_recovery_end_timeline\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ebackup_start_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ebackup_end_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eend_of_backup_record_required\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-VERSION\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.11. Version Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-VERSION\" title=\"Table 9.93. Version Information Functions\"\u003eTable 9.93\u003c/a\u003e print version information.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-VERSION\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.93. Version Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eversion\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string describing the \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e server's version. You can also get this information from \u003ca class=\"xref\" href=\"/docs/18/runtime-config-preset.html#GUC-SERVER-VERSION\"\u003eserver_version\u003c/a\u003e, or for a machine-readable version use \u003ca class=\"xref\" href=\"/docs/18/runtime-config-preset.html#GUC-SERVER-VERSION-NUM\"\u003eserver_version_num\u003c/a\u003e. Software developers should use \u003ccode class=\"varname\"\u003eserver_version_num\u003c/code\u003e (available since 8.2) or \u003ca class=\"xref\" href=\"/docs/18/libpq-status.html#LIBPQ-PQSERVERVERSION\"\u003e\u003ccode class=\"function\"\u003ePQserverVersion\u003c/code\u003e\u003c/a\u003e instead of parsing the text version.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eunicode_version\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string representing the version of Unicode used by \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eicu_unicode_version\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string representing the version of Unicode used by ICU, if the server was built with ICU support; otherwise returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-WAL-SUMMARY\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.12. WAL Summarization Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-WAL-SUMMARY\" title=\"Table 9.94. WAL Summarization Information Functions\"\u003eTable 9.94\u003c/a\u003e print information about the status of WAL summarization. See \u003ca class=\"xref\" href=\"/docs/18/runtime-config-wal.html#GUC-SUMMARIZE-WAL\"\u003esummarize_wal\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-WAL-SUMMARY\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.94. WAL Summarization Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_available_wal_summaries\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etli\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003estart_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eend_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns information about the WAL summary files present in the data directory, under \u003ccode class=\"literal\"\u003epg_wal/summaries\u003c/code\u003e. One row will be returned per WAL summary file. Each file summarizes WAL on the indicated TLI within the indicated LSN range. This function might be useful to determine whether enough WAL summaries are present on the server to take an incremental backup based on some prior backup whose start LSN is known.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_wal_summary_contents\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etli\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003estart_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eend_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003erelfilenode\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ereltablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ereldatabase\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003erelforknumber\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003esmallint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003erelblocknumber\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_limit_block\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns one information about the contents of a single WAL summary file identified by TLI and starting and ending LSNs. Each row with \u003ccode class=\"literal\"\u003eis_limit_block\u003c/code\u003e false indicates that the block identified by the remaining output columns was modified by at least one WAL record within the range of records summarized by this file. Each row with \u003ccode class=\"literal\"\u003eis_limit_block\u003c/code\u003e true indicates either that (a) the relation fork was truncated to the length given by \u003ccode class=\"literal\"\u003erelblocknumber\u003c/code\u003e within the relevant range of WAL records or (b) that the relation fork was created or dropped within the relevant range of WAL records; in such cases, \u003ccode class=\"literal\"\u003erelblocknumber\u003c/code\u003e will be zero.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_wal_summarizer_state\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003esummarized_tli\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003esummarized_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epending_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003esummarizer_pid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eint\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns information about the progress of the WAL summarizer. If the WAL summarizer has never run since the instance was started, then \u003ccode class=\"literal\"\u003esummarized_tli\u003c/code\u003e and \u003ccode class=\"literal\"\u003esummarized_lsn\u003c/code\u003e will be \u003ccode class=\"literal\"\u003e0\u003c/code\u003e and \u003ccode class=\"literal\"\u003e0/0\u003c/code\u003e respectively; otherwise, they will be the TLI and ending LSN of the last WAL summary file written to disk. If the WAL summarizer is currently running, \u003ccode class=\"literal\"\u003epending_lsn\u003c/code\u003e will be the ending LSN of the last record that it has consumed, which must always be greater than or equal to \u003ccode class=\"literal\"\u003esummarized_lsn\u003c/code\u003e; if the WAL summarizer is not running, it will be equal to \u003ccode class=\"literal\"\u003esummarized_lsn\u003c/code\u003e. \u003ccode class=\"literal\"\u003esummarizer_pid\u003c/code\u003e is the PID of the WAL summarizer process, if it is running, and otherwise NULL.\u003c/p\u003e\n\u003cp\u003eAs a special exception, the WAL summarizer will refuse to generate WAL summary files if run on WAL generated under \u003ccode class=\"literal\"\u003ewal_level=minimal\u003c/code\u003e, since such summaries would be unsafe to use as the basis for an incremental backup. In this case, the fields above will continue to advance as if summaries were being generated, but nothing will be written to disk. Once the summarizer reaches WAL generated while \u003ccode class=\"literal\"\u003ewal_level\u003c/code\u003e was set to \u003ccode class=\"literal\"\u003ereplica\u003c/code\u003e or higher, it will resume writing summaries to disk.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003c/div\u003e","manual_path":"functions-info.html","operator_classes":[],"operators":[],"ranges":[],"related":[{"label":"pg_type catalog","url":"/wiki/catalog/pg_type/?v=18"},{"label":"pg_cast catalog","url":"/wiki/catalog/pg_cast/?v=18"},{"label":"pg_operator catalog","url":"/wiki/catalog/pg_operator/?v=18"},{"label":"pg_opclass catalog","url":"/wiki/catalog/pg_opclass/?v=18"},{"label":"Arrays","url":"/wiki/type/arrays/?v=18"}],"release":{"channel":"stable","label":"18.6","major":"18","manual_sha256":{"arrays.html":"0e1d5c5a7b4a949d4439995f44f74ad4264e050d16eb9ad2a850fbaee04032df","catalog-pg-type.html":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","datatype-binary.html":"0c03ec47b76e37888a3da7f5dcfd340128a5d356642a85185cc9ebe17856a904","datatype-bit.html":"c49124aad561636c18080b9e09572fde7785a6b9eae86f5a33283f0fd6774c37","datatype-boolean.html":"b633f663e6c8276e7056287640c413aa79dbc15d5353cee0d41653d58d376956","datatype-character.html":"c73eebe413ea709a7792e4cfc3cfe9fb68cb496ebe83c3ebaa9d09f8c40d0f73","datatype-datetime.html":"e366275d8b13845bfa4ef0d68faa093e5f3ecb708a1ec870cbcbf7e425b85699","datatype-enum.html":"cab38e53222e30cc94b24de4b33634fd22d7c93f58ebcf35f646c9b8da78fae8","datatype-geometric.html":"0eb3053cfe7d6b0a4b5592c5d7af8d97cae527e87f063c5793413bcba5c14cd9","datatype-json.html":"650162a05b660146b500a205d523374d00aee117a6a6240d30262be51b6e33e5","datatype-money.html":"8b29c14b90679683ac5c472b59a0a7e2853f32cc7db43fab417b2697a6879964","datatype-net-types.html":"96846e641cc37727ddcd8b8a1aa0dbe33cd9787760a2b4efb0dcb9403d5be63f","datatype-numeric.html":"b74619f7ac2f1ca9f85c48073df78c33dd30e464e61baba6008634534edcb500","datatype-oid.html":"8b3360302225f08ae72716ce1804596de95b568e5d31f788cb4597427b28cc38","datatype-pg-lsn.html":"339172f5107cc7eb7139bec911277647219e92a532cebd0f3da0a5dacf8195af","datatype-pseudo.html":"c7cf0b8214304bd8702c95f2142671ae5f0d631f83717f9c07d9e1f2579961b4","datatype-textsearch.html":"4b15e05be8b49a71b28aea22f2c46d0dbf639a91e7b4fe129a4c737c6daad47c","datatype-uuid.html":"292b307b3223c6182bdba687e7f69e6dca9038430143ad79d56327f6ed4c3246","datatype-xml.html":"061fc2295b7b69be704f0a741b8decd10ad721059f871fb0243c669bb54d7822","datatype.html":"e581f67c74e42006289638c8659e9b338adbfd7f068bd8bf2b3be3880fcd2254","domains.html":"82d486973ccc35d14276627a67ac76b434452f23f9ed4d8aa3fbb01fdf285fc2","functions-info.html":"78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87","rangetypes.html":"e4960abc7ce8e51d794f94f1e57b099d30b7f75dd7f2b23a960eef91f6291c33","rowtypes.html":"74f99e029c3a9edfd3e18810ba3c8cb66d3aada91eb67b86476560871e6617e9","sql-createdomain.html":"e94f927196de1b0ea1ce35cd4603c1f6f544439adcc0edf1c4222358e832245b"},"ref":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2","revision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","source_files":{"doc/src/sgml/datatype.sgml":"86328daa77e20d81d222376ec0306d9841a17104e436c08d138eb763aefb3700","src/include/catalog/pg_am.dat":"b3cb86b102a42fb0024cbd99779c9897afb40d12a71f5cc5a0e5aee7ff2f9969","src/include/catalog/pg_am.h":"3426799df799f32163fcc0765f43dbdb5e88e626acf31284fef9fc6014b69d8e","src/include/catalog/pg_cast.dat":"97911281ca2c81917394ccb2ec13367e37c6801fd461d5e1a3d2f28b911b46b2","src/include/catalog/pg_cast.h":"de585c7df687d698e7d1d100dce8a794ac9da52414ea48169191019178c8f053","src/include/catalog/pg_opclass.dat":"4ee7d3619a6aa106e1c0db55de903931c7d11b1c60ba053a022519c55f8ee668","src/include/catalog/pg_opclass.h":"9c218537806c8ef0398302faaca7f91315dfc1198c48706cebffb479b68defaf","src/include/catalog/pg_operator.dat":"5d35b9b2ef5f9797cc815263927ef8a12367fedace53e828b4e8b320e2a7f703","src/include/catalog/pg_operator.h":"621b18cfffe102413d79b746ce7a10f77fc60fdd097bac34c22b31070d3ee3c4","src/include/catalog/pg_opfamily.dat":"3b694879027b858f2ecf1fa1152b7e30c6e15a216ba99c2384291c30e9d52311","src/include/catalog/pg_opfamily.h":"e1f5fc8aebd3042df847455bf66bf755f768c2aa8a9b03d22f7ec8563eba59c0","src/include/catalog/pg_proc.dat":"1f934ce80d460159dda137714374a35f9896315ea2476709cbb4da13b38ef95a","src/include/catalog/pg_proc.h":"f7d59f07c5b95e2f3c7141762a0f576e8a3af7581ba54c27537f4d500472bea5","src/include/catalog/pg_range.dat":"5c2271f8e89e9378d1887204e5785060b77405b5f0ff3e6c719250c9c1dcfcc4","src/include/catalog/pg_range.h":"45546d952b5181f989bd9234721897fc2b37005c8e49ce2ddc156f26974c3ca4","src/include/catalog/pg_type.dat":"5f5887b75677cba2d4a1a0cfeb355df5ed91f85d385fac88bd8d7c605b3578f9","src/include/catalog/pg_type.h":"8fb198749fd82b6c1818a3c18455f226f66116fcfeb3d4959c65ce3fda22802e"},"source_sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"},"sections":[],"signature":"txid_snapshot","sources":[{"label":"PostgreSQL 18 English manual","path":"functions-info.html","sha256":"78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87","url":"/docs/18/functions-info.html"},{"label":"Matching PostgreSQL source archive","sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","url":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2"}]},"ManualEvidence":{"manual_path":"functions-info.html","release":{"channel":"stable","label":"18.6","major":"18","manual_sha256":{"arrays.html":"0e1d5c5a7b4a949d4439995f44f74ad4264e050d16eb9ad2a850fbaee04032df","catalog-pg-type.html":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","datatype-binary.html":"0c03ec47b76e37888a3da7f5dcfd340128a5d356642a85185cc9ebe17856a904","datatype-bit.html":"c49124aad561636c18080b9e09572fde7785a6b9eae86f5a33283f0fd6774c37","datatype-boolean.html":"b633f663e6c8276e7056287640c413aa79dbc15d5353cee0d41653d58d376956","datatype-character.html":"c73eebe413ea709a7792e4cfc3cfe9fb68cb496ebe83c3ebaa9d09f8c40d0f73","datatype-datetime.html":"e366275d8b13845bfa4ef0d68faa093e5f3ecb708a1ec870cbcbf7e425b85699","datatype-enum.html":"cab38e53222e30cc94b24de4b33634fd22d7c93f58ebcf35f646c9b8da78fae8","datatype-geometric.html":"0eb3053cfe7d6b0a4b5592c5d7af8d97cae527e87f063c5793413bcba5c14cd9","datatype-json.html":"650162a05b660146b500a205d523374d00aee117a6a6240d30262be51b6e33e5","datatype-money.html":"8b29c14b90679683ac5c472b59a0a7e2853f32cc7db43fab417b2697a6879964","datatype-net-types.html":"96846e641cc37727ddcd8b8a1aa0dbe33cd9787760a2b4efb0dcb9403d5be63f","datatype-numeric.html":"b74619f7ac2f1ca9f85c48073df78c33dd30e464e61baba6008634534edcb500","datatype-oid.html":"8b3360302225f08ae72716ce1804596de95b568e5d31f788cb4597427b28cc38","datatype-pg-lsn.html":"339172f5107cc7eb7139bec911277647219e92a532cebd0f3da0a5dacf8195af","datatype-pseudo.html":"c7cf0b8214304bd8702c95f2142671ae5f0d631f83717f9c07d9e1f2579961b4","datatype-textsearch.html":"4b15e05be8b49a71b28aea22f2c46d0dbf639a91e7b4fe129a4c737c6daad47c","datatype-uuid.html":"292b307b3223c6182bdba687e7f69e6dca9038430143ad79d56327f6ed4c3246","datatype-xml.html":"061fc2295b7b69be704f0a741b8decd10ad721059f871fb0243c669bb54d7822","datatype.html":"e581f67c74e42006289638c8659e9b338adbfd7f068bd8bf2b3be3880fcd2254","domains.html":"82d486973ccc35d14276627a67ac76b434452f23f9ed4d8aa3fbb01fdf285fc2","functions-info.html":"78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87","rangetypes.html":"e4960abc7ce8e51d794f94f1e57b099d30b7f75dd7f2b23a960eef91f6291c33","rowtypes.html":"74f99e029c3a9edfd3e18810ba3c8cb66d3aada91eb67b86476560871e6617e9","sql-createdomain.html":"e94f927196de1b0ea1ce35cd4603c1f6f544439adcc0edf1c4222358e832245b"},"ref":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2","revision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","source_files":{"doc/src/sgml/datatype.sgml":"86328daa77e20d81d222376ec0306d9841a17104e436c08d138eb763aefb3700","src/include/catalog/pg_am.dat":"b3cb86b102a42fb0024cbd99779c9897afb40d12a71f5cc5a0e5aee7ff2f9969","src/include/catalog/pg_am.h":"3426799df799f32163fcc0765f43dbdb5e88e626acf31284fef9fc6014b69d8e","src/include/catalog/pg_cast.dat":"97911281ca2c81917394ccb2ec13367e37c6801fd461d5e1a3d2f28b911b46b2","src/include/catalog/pg_cast.h":"de585c7df687d698e7d1d100dce8a794ac9da52414ea48169191019178c8f053","src/include/catalog/pg_opclass.dat":"4ee7d3619a6aa106e1c0db55de903931c7d11b1c60ba053a022519c55f8ee668","src/include/catalog/pg_opclass.h":"9c218537806c8ef0398302faaca7f91315dfc1198c48706cebffb479b68defaf","src/include/catalog/pg_operator.dat":"5d35b9b2ef5f9797cc815263927ef8a12367fedace53e828b4e8b320e2a7f703","src/include/catalog/pg_operator.h":"621b18cfffe102413d79b746ce7a10f77fc60fdd097bac34c22b31070d3ee3c4","src/include/catalog/pg_opfamily.dat":"3b694879027b858f2ecf1fa1152b7e30c6e15a216ba99c2384291c30e9d52311","src/include/catalog/pg_opfamily.h":"e1f5fc8aebd3042df847455bf66bf755f768c2aa8a9b03d22f7ec8563eba59c0","src/include/catalog/pg_proc.dat":"1f934ce80d460159dda137714374a35f9896315ea2476709cbb4da13b38ef95a","src/include/catalog/pg_proc.h":"f7d59f07c5b95e2f3c7141762a0f576e8a3af7581ba54c27537f4d500472bea5","src/include/catalog/pg_range.dat":"5c2271f8e89e9378d1887204e5785060b77405b5f0ff3e6c719250c9c1dcfcc4","src/include/catalog/pg_range.h":"45546d952b5181f989bd9234721897fc2b37005c8e49ce2ddc156f26974c3ca4","src/include/catalog/pg_type.dat":"5f5887b75677cba2d4a1a0cfeb355df5ed91f85d385fac88bd8d7c605b3578f9","src/include/catalog/pg_type.h":"8fb198749fd82b6c1818a3c18455f226f66116fcfeb3d4959c65ce3fda22802e"},"source_sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"},"sources":[{"label":"PostgreSQL 18 English manual","path":"functions-info.html","sha256":"78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87","url":"/docs/18/functions-info.html"},{"label":"Matching PostgreSQL source archive","sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","url":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2"}]},"MeasuredEvidence":{}},"Text":{"Collection":"type","Key":"txid_snapshot","SourceDatabase":"center","Version":"18","Locale":"en","Title":"txid_snapshot","Summary":"user-level transaction ID snapshot (deprecated; see pg_snapshot )","BodyHTML":"\u003cdiv id=\"FUNCTIONS-INFO\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2\u003e9.27. System Information Functions and Operators \u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cp\u003eThe functions described in this section are used to obtain various information about a \u003cspan\u003ePostgreSQL\u003c/span\u003e installation.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-SESSION\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.1. Session Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-SESSION-TABLE\" rel=\"nofollow\"\u003eTable 9.71\u003c/a\u003e shows several functions that extract session and system information.\u003c/p\u003e\n\u003cp\u003eIn addition to the functions listed in this section, there are a number of functions related to the statistics system that also provide system information. See \u003ca href=\"/docs/18/monitoring-stats.html#MONITORING-STATS-FUNCTIONS\" rel=\"nofollow\"\u003eSection 27.2.26\u003c/a\u003e for more information.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-SESSION-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.71. Session Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ecurrent_catalog\u003c/code\u003e → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e \u003ccode\u003ecurrent_database\u003c/code\u003e () → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the current database. (Databases are called \u003cspan\u003e“\u003cspan\u003ecatalogs\u003c/span\u003e”\u003c/span\u003e in the SQL standard, so \u003ccode\u003ecurrent_catalog\u003c/code\u003e is the standard\u0026#39;s spelling.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ecurrent_query\u003c/code\u003e () → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the text of the currently executing query, as submitted by the client (which might contain more than one statement).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ecurrent_role\u003c/code\u003e → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is equivalent to \u003ccode\u003ecurrent_user\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e  \u003ccode\u003ecurrent_schema\u003c/code\u003e → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ecurrent_schema\u003c/code\u003e () → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the schema that is first in the search path (or a null value if the search path is empty). This is the schema that will be used for any tables or other named objects that are created without specifying a target schema.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e  \u003ccode\u003ecurrent_schemas\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003einclude_implicit\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e ) → \u003ccode\u003ename[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the names of all schemas presently in the effective search path, in their priority order. (Items in the current \u003ca href=\"/docs/18/runtime-config-client.html#GUC-SEARCH-PATH\" rel=\"nofollow\"\u003esearch_path\u003c/a\u003e setting that do not correspond to existing, searchable schemas are omitted.) If the Boolean argument is \u003ccode\u003etrue\u003c/code\u003e, then implicitly-searched system schemas such as \u003ccode\u003epg_catalog\u003c/code\u003e are included in the result.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e  \u003ccode\u003ecurrent_user\u003c/code\u003e → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the user name of the current execution context.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003einet_client_addr\u003c/code\u003e () → \u003ccode\u003einet\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP address of the current client, or \u003ccode\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003einet_client_port\u003c/code\u003e () → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP port number of the current client, or \u003ccode\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003einet_server_addr\u003c/code\u003e () → \u003ccode\u003einet\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP address on which the server accepted the current connection, or \u003ccode\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003einet_server_port\u003c/code\u003e () → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP port number on which the server accepted the current connection, or \u003ccode\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_backend_pid\u003c/code\u003e () → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the process ID of the server process attached to the current session.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_blocking_pids\u003c/code\u003e ( \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003einteger[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the process ID(s) of the sessions that are blocking the server process with the specified process ID from acquiring a lock, or an empty array if there is no such server process or it is not blocked.\u003c/p\u003e\n\u003cp\u003eOne server process blocks another if it either holds a lock that conflicts with the blocked process\u0026#39;s lock request (hard block), or is waiting for a lock that would conflict with the blocked process\u0026#39;s lock request and is ahead of it in the wait queue (soft block). When using parallel queries the result always lists client-visible process IDs (that is, \u003ccode\u003epg_backend_pid\u003c/code\u003e results) even if the actual lock is held or awaited by a child worker process. As a result of that, there may be duplicated PIDs in the result. Also note that when a prepared transaction holds a conflicting lock, it will be represented by a zero process ID.\u003c/p\u003e\n\u003cp\u003eFrequent calls to this function could have some impact on database performance, because it needs exclusive access to the lock manager\u0026#39;s shared state for a short time.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_conf_load_time\u003c/code\u003e () → \u003ccode\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the time when the server configuration files were last loaded. If the current session was alive at the time, this will be the time when the session itself re-read the configuration files (so the reading will vary a little in different sessions). Otherwise it is the time when the postmaster process re-read the configuration files.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e    \u003ccode\u003epg_current_logfile\u003c/code\u003e ( [ \u003cspan\u003e\u003ccode\u003etext\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the path name of the log file currently in use by the logging collector. The path includes the \u003ca href=\"/docs/18/runtime-config-logging.html#GUC-LOG-DIRECTORY\" rel=\"nofollow\"\u003elog_directory\u003c/a\u003e directory and the individual log file name. The result is \u003ccode\u003eNULL\u003c/code\u003e if the logging collector is disabled. When multiple log files exist, each in a different format, \u003ccode\u003epg_current_logfile\u003c/code\u003e without an argument returns the path of the file having the first format found in the ordered list: \u003ccode\u003estderr\u003c/code\u003e, \u003ccode\u003ecsvlog\u003c/code\u003e, \u003ccode\u003ejsonlog\u003c/code\u003e. \u003ccode\u003eNULL\u003c/code\u003e is returned if no log file has any of these formats. To request information about a specific log file format, supply either \u003ccode\u003ecsvlog\u003c/code\u003e, \u003ccode\u003ejsonlog\u003c/code\u003e or \u003ccode\u003estderr\u003c/code\u003e as the value of the optional parameter. The result is \u003ccode\u003eNULL\u003c/code\u003e if the log format requested is not configured in \u003ca href=\"/docs/18/runtime-config-logging.html#GUC-LOG-DESTINATION\" rel=\"nofollow\"\u003elog_destination\u003c/a\u003e. The result reflects the contents of the \u003ccode\u003ecurrent_logfiles\u003c/code\u003e file.\u003c/p\u003e\n\u003cp\u003eThis function is restricted to superusers and roles with privileges of the \u003ccode\u003epg_monitor\u003c/code\u003e role by default, but other users can be granted EXECUTE to run the function.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_loaded_modules\u003c/code\u003e () → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003emodule_name\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eversion\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003efile_name\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a list of the loadable modules that are loaded into the current server session. The \u003cem\u003e\u003ccode\u003emodule_name\u003c/code\u003e\u003c/em\u003e and \u003cem\u003e\u003ccode\u003eversion\u003c/code\u003e\u003c/em\u003e fields are NULL unless the module author supplied values for them using the \u003ccode\u003ePG_MODULE_MAGIC_EXT\u003c/code\u003e macro. The \u003cem\u003e\u003ccode\u003efile_name\u003c/code\u003e\u003c/em\u003e field gives the file name of the module (shared library).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_my_temp_schema\u003c/code\u003e () → \u003ccode\u003eoid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the current session\u0026#39;s temporary schema, or zero if it has none (because it has not created any temporary tables).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_is_other_temp_schema\u003c/code\u003e ( \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if the given OID is the OID of another session\u0026#39;s temporary schema. (This can be useful, for example, to exclude other sessions\u0026#39; temporary tables from a catalog display.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_jit_available\u003c/code\u003e () → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if a JIT compiler extension is available (see \u003ca href=\"/docs/18/jit.html\" rel=\"nofollow\"\u003eChapter 30\u003c/a\u003e) and the \u003ca href=\"/docs/18/runtime-config-query.html#GUC-JIT\" rel=\"nofollow\"\u003ejit\u003c/a\u003e configuration parameter is set to \u003ccode\u003eon\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_numa_available\u003c/code\u003e () → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if the server has been compiled with NUMA support.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_listening_channels\u003c/code\u003e () → \u003ccode\u003esetof text\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of names of asynchronous notification channels that the current session is listening to.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_notification_queue_usage\u003c/code\u003e () → \u003ccode\u003edouble precision\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the fraction (0–1) of the asynchronous notification queue\u0026#39;s maximum size that is currently occupied by notifications that are waiting to be processed. See \u003ca href=\"/docs/18/sql-listen.html\" title=\"LISTEN\" rel=\"nofollow\"\u003e\u003cspan\u003eLISTEN\u003c/span\u003e\u003c/a\u003e and \u003ca href=\"/docs/18/sql-notify.html\" title=\"NOTIFY\" rel=\"nofollow\"\u003e\u003cspan\u003eNOTIFY\u003c/span\u003e\u003c/a\u003e for more information.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_postmaster_start_time\u003c/code\u003e () → \u003ccode\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the time when the server started.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_safe_snapshot_blocking_pids\u003c/code\u003e ( \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003einteger[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the process ID(s) of the sessions that are blocking the server process with the specified process ID from acquiring a safe snapshot, or an empty array if there is no such server process or it is not blocked.\u003c/p\u003e\n\u003cp\u003eA session running a \u003ccode\u003eSERIALIZABLE\u003c/code\u003e transaction blocks a \u003ccode\u003eSERIALIZABLE READ ONLY DEFERRABLE\u003c/code\u003e transaction from acquiring a snapshot until the latter determines that it is safe to avoid taking any predicate locks. See \u003ca href=\"/docs/18/transaction-iso.html#XACT-SERIALIZABLE\" rel=\"nofollow\"\u003eSection 13.2.3\u003c/a\u003e for more information about serializable and deferrable transactions.\u003c/p\u003e\n\u003cp\u003eFrequent calls to this function could have some impact on database performance, because it needs access to the predicate lock manager\u0026#39;s shared state for a short time.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_trigger_depth\u003c/code\u003e () → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current nesting level of \u003cspan\u003ePostgreSQL\u003c/span\u003e triggers (0 if not called, directly or indirectly, from inside a trigger).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003esession_user\u003c/code\u003e → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the session user\u0026#39;s name.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003esystem_user\u003c/code\u003e → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the authentication method and the identity (if any) that the user presented during the authentication cycle before they were assigned a database role. It is represented as \u003ccode\u003eauth_method:identity\u003c/code\u003e or \u003ccode\u003eNULL\u003c/code\u003e if the user has not been authenticated (for example if \u003ca href=\"/docs/18/auth-trust.html\" rel=\"nofollow\"\u003eTrust authentication\u003c/a\u003e has been used).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003euser\u003c/code\u003e → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is equivalent to \u003ccode\u003ecurrent_user\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv\u003e\n\u003ch3\u003eNote\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003ecurrent_catalog\u003c/code\u003e, \u003ccode\u003ecurrent_role\u003c/code\u003e, \u003ccode\u003ecurrent_schema\u003c/code\u003e, \u003ccode\u003ecurrent_user\u003c/code\u003e, \u003ccode\u003esession_user\u003c/code\u003e, and \u003ccode\u003euser\u003c/code\u003e have special syntactic status in SQL: they must be called without trailing parentheses. In PostgreSQL, parentheses can optionally be used with \u003ccode\u003ecurrent_schema\u003c/code\u003e, but not with the others.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003ccode\u003esession_user\u003c/code\u003e is normally the user who initiated the current database connection; but superusers can change this setting with \u003ca href=\"/docs/18/sql-set-session-authorization.html\" title=\"SET SESSION AUTHORIZATION\" rel=\"nofollow\"\u003e\u003cspan\u003eSET SESSION AUTHORIZATION\u003c/span\u003e\u003c/a\u003e. The \u003ccode\u003ecurrent_user\u003c/code\u003e is the user identifier that is applicable for permission checking. Normally it is equal to the session user, but it can be changed with \u003ca href=\"/docs/18/sql-set-role.html\" title=\"SET ROLE\" rel=\"nofollow\"\u003e\u003cspan\u003eSET ROLE\u003c/span\u003e\u003c/a\u003e. It also changes during the execution of functions with the attribute \u003ccode\u003eSECURITY DEFINER\u003c/code\u003e. In Unix parlance, the session user is the \u003cspan\u003e“\u003cspan\u003ereal user\u003c/span\u003e”\u003c/span\u003e and the current user is the \u003cspan\u003e“\u003cspan\u003eeffective user\u003c/span\u003e”\u003c/span\u003e. \u003ccode\u003ecurrent_role\u003c/code\u003e and \u003ccode\u003euser\u003c/code\u003e are synonyms for \u003ccode\u003ecurrent_user\u003c/code\u003e. (The SQL standard draws a distinction between \u003ccode\u003ecurrent_role\u003c/code\u003e and \u003ccode\u003ecurrent_user\u003c/code\u003e, but \u003cspan\u003ePostgreSQL\u003c/span\u003e does not, since it unifies users and roles into a single kind of entity.)\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-ACCESS\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.2. Access Privilege Inquiry Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE\" rel=\"nofollow\"\u003eTable 9.72\u003c/a\u003e lists functions that allow querying object access privileges programmatically. (See \u003ca href=\"/docs/18/ddl-priv.html\" rel=\"nofollow\"\u003eSection 5.8\u003c/a\u003e for more information about privileges.) In these functions, the user whose privileges are being inquired about can be specified by name or by OID (\u003ccode\u003epg_authid\u003c/code\u003e.\u003ccode\u003eoid\u003c/code\u003e), or if the name is given as \u003ccode\u003epublic\u003c/code\u003e then the privileges of the PUBLIC pseudo-role are checked. Also, the \u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e argument can be omitted entirely, in which case the \u003ccode\u003ecurrent_user\u003c/code\u003e is assumed. The object that is being inquired about can be specified either by name or by OID, too. When specifying by name, a schema name can be included if relevant. The access privilege of interest is specified by a text string, which must evaluate to one of the appropriate privilege keywords for the object\u0026#39;s type (e.g., \u003ccode\u003eSELECT\u003c/code\u003e). Optionally, \u003ccode\u003eWITH GRANT OPTION\u003c/code\u003e can be added to a privilege type to test whether the privilege is held with grant option. Also, multiple privilege types can be listed separated by commas, in which case the result will be true if any of the listed privileges is held. (Case of the privilege string is not significant, and extra whitespace is allowed between but not within privilege names.) Some examples:\u003c/p\u003e\n\u003cpre\u003eSELECT has_table_privilege(\u0026#39;myschema.mytable\u0026#39;, \u0026#39;select\u0026#39;);\nSELECT has_table_privilege(\u0026#39;joe\u0026#39;, \u0026#39;mytable\u0026#39;, \u0026#39;INSERT, SELECT WITH GRANT OPTION\u0026#39;);\n\u003c/pre\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-ACCESS-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.72. Access Privilege Inquiry Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_any_column_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for any column of table? This succeeds either if the privilege is held for the whole table, or if there is a column-level grant of the privilege for at least one column. Allowable privilege types are \u003ccode\u003eSELECT\u003c/code\u003e, \u003ccode\u003eINSERT\u003c/code\u003e, \u003ccode\u003eUPDATE\u003c/code\u003e, and \u003ccode\u003eREFERENCES\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_column_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003esmallint\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for the specified table column? This succeeds either if the privilege is held for the whole table, or if there is a column-level grant of the privilege for the column. The column can be specified by name or by attribute number (\u003ccode\u003epg_attribute\u003c/code\u003e.\u003ccode\u003eattnum\u003c/code\u003e). Allowable privilege types are \u003ccode\u003eSELECT\u003c/code\u003e, \u003ccode\u003eINSERT\u003c/code\u003e, \u003ccode\u003eUPDATE\u003c/code\u003e, and \u003ccode\u003eREFERENCES\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_database_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003edatabase\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for database? Allowable privilege types are \u003ccode\u003eCREATE\u003c/code\u003e, \u003ccode\u003eCONNECT\u003c/code\u003e, \u003ccode\u003eTEMPORARY\u003c/code\u003e, and \u003ccode\u003eTEMP\u003c/code\u003e (which is equivalent to \u003ccode\u003eTEMPORARY\u003c/code\u003e).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_foreign_data_wrapper_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003efdw\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for foreign-data wrapper? The only allowable privilege type is \u003ccode\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_function_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003efunction\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for function? The only allowable privilege type is \u003ccode\u003eEXECUTE\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eWhen specifying a function by name rather than by OID, the allowed input is the same as for the \u003ccode\u003eregprocedure\u003c/code\u003e data type (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e). An example is:\u003c/p\u003e\n\u003cpre\u003e\nSELECT has_function_privilege(\u0026#39;joeuser\u0026#39;, \u0026#39;myfunc(int, text)\u0026#39;, \u0026#39;execute\u0026#39;);\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_language_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003elanguage\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for language? The only allowable privilege type is \u003ccode\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_largeobject_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003elargeobject\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for large object? Allowable privilege types are \u003ccode\u003eSELECT\u003c/code\u003e and \u003ccode\u003eUPDATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_parameter_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003eparameter\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for configuration parameter? The parameter name is case-insensitive. Allowable privilege types are \u003ccode\u003eSET\u003c/code\u003e and \u003ccode\u003eALTER SYSTEM\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_schema_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for schema? Allowable privilege types are \u003ccode\u003eCREATE\u003c/code\u003e and \u003ccode\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_sequence_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003esequence\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for sequence? Allowable privilege types are \u003ccode\u003eUSAGE\u003c/code\u003e, \u003ccode\u003eSELECT\u003c/code\u003e, and \u003ccode\u003eUPDATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_server_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003eserver\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for foreign server? The only allowable privilege type is \u003ccode\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_table_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for table? Allowable privilege types are \u003ccode\u003eSELECT\u003c/code\u003e, \u003ccode\u003eINSERT\u003c/code\u003e, \u003ccode\u003eUPDATE\u003c/code\u003e, \u003ccode\u003eDELETE\u003c/code\u003e, \u003ccode\u003eTRUNCATE\u003c/code\u003e, \u003ccode\u003eREFERENCES\u003c/code\u003e, \u003ccode\u003eTRIGGER\u003c/code\u003e, and \u003ccode\u003eMAINTAIN\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_tablespace_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for tablespace? The only allowable privilege type is \u003ccode\u003eCREATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ehas_type_privilege\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for data type? The only allowable privilege type is \u003ccode\u003eUSAGE\u003c/code\u003e. When specifying a type by name rather than by OID, the allowed input is the same as for the \u003ccode\u003eregtype\u003c/code\u003e data type (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_has_role\u003c/code\u003e ( [ \u003cspan\u003e\u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem\u003e\u003ccode\u003erole\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for role? Allowable privilege types are \u003ccode\u003eMEMBER\u003c/code\u003e, \u003ccode\u003eUSAGE\u003c/code\u003e, and \u003ccode\u003eSET\u003c/code\u003e. \u003ccode\u003eMEMBER\u003c/code\u003e denotes direct or indirect membership in the role without regard to what specific privileges may be conferred. \u003ccode\u003eUSAGE\u003c/code\u003e denotes whether the privileges of the role are immediately available without doing \u003ccode\u003eSET ROLE\u003c/code\u003e, while \u003ccode\u003eSET\u003c/code\u003e denotes whether it is possible to change to the role using the \u003ccode\u003eSET ROLE\u003c/code\u003e command. \u003ccode\u003eWITH ADMIN OPTION\u003c/code\u003e or \u003ccode\u003eWITH GRANT OPTION\u003c/code\u003e can be added to any of these privilege types to test whether the \u003ccode\u003eADMIN\u003c/code\u003e privilege is held (all six spellings test the same thing). This function does not allow the special case of setting \u003cem\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e to \u003ccode\u003epublic\u003c/code\u003e, because the PUBLIC pseudo-role can never be a member of real roles.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003erow_security_active\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e or \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs row-level security active for the specified table in the context of the current user and current environment?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-ACLITEM-OP-TABLE\" rel=\"nofollow\"\u003eTable 9.73\u003c/a\u003e shows the operators available for the \u003ccode\u003eaclitem\u003c/code\u003e type, which is the catalog representation of access privileges. See \u003ca href=\"/docs/18/ddl-priv.html\" rel=\"nofollow\"\u003eSection 5.8\u003c/a\u003e for information about how to read access privilege values.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-ACLITEM-OP-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.73. \u003ccode\u003eaclitem\u003c/code\u003e Operators\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eOperator\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003cp\u003eExample(s)\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eaclitem\u003c/code\u003e \u003ccode\u003e=\u003c/code\u003e \u003ccode\u003eaclitem\u003c/code\u003e → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAre \u003ccode\u003eaclitem\u003c/code\u003es equal? (Notice that type \u003ccode\u003eaclitem\u003c/code\u003e lacks the usual set of comparison operators; it has only equality. In turn, \u003ccode\u003eaclitem\u003c/code\u003e arrays can only be compared for equality.)\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e\u0026#39;calvin=r*w/hobbes\u0026#39;::aclitem = \u0026#39;calvin=r*w*/hobbes\u0026#39;::aclitem\u003c/code\u003e → \u003ccode\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eaclitem[]\u003c/code\u003e \u003ccode\u003e@\u0026gt;\u003c/code\u003e \u003ccode\u003eaclitem\u003c/code\u003e → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes array contain the specified privileges? (This is true if there is an array entry that matches the \u003ccode\u003eaclitem\u003c/code\u003e\u0026#39;s grantee and grantor, and has at least the specified set of privileges.)\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e\u0026#39;{calvin=r*w/hobbes,hobbes=r*w*/postgres}\u0026#39;::aclitem[] @\u0026gt; \u0026#39;calvin=r*/hobbes\u0026#39;::aclitem\u003c/code\u003e → \u003ccode\u003et\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-ACLITEM-FN-TABLE\" rel=\"nofollow\"\u003eTable 9.74\u003c/a\u003e shows some additional functions to manage the \u003ccode\u003eaclitem\u003c/code\u003e type.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-ACLITEM-FN-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.74. \u003ccode\u003eaclitem\u003c/code\u003e Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eacldefault\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003e\u0026#34;char\u0026#34;\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eownerId\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConstructs an \u003ccode\u003eaclitem\u003c/code\u003e array holding the default access privileges for an object of type \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e belonging to the role with OID \u003cem\u003e\u003ccode\u003eownerId\u003c/code\u003e\u003c/em\u003e. This represents the access privileges that will be assumed when an object\u0026#39;s ACL entry is null. (The default access privileges are described in \u003ca href=\"/docs/18/ddl-priv.html\" rel=\"nofollow\"\u003eSection 5.8\u003c/a\u003e.) The \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e parameter must be one of \u0026#39;c\u0026#39; for \u003ccode\u003eCOLUMN\u003c/code\u003e, \u0026#39;r\u0026#39; for \u003ccode\u003eTABLE\u003c/code\u003e and table-like objects, \u0026#39;s\u0026#39; for \u003ccode\u003eSEQUENCE\u003c/code\u003e, \u0026#39;d\u0026#39; for \u003ccode\u003eDATABASE\u003c/code\u003e, \u0026#39;f\u0026#39; for \u003ccode\u003eFUNCTION\u003c/code\u003e or \u003ccode\u003ePROCEDURE\u003c/code\u003e, \u0026#39;l\u0026#39; for \u003ccode\u003eLANGUAGE\u003c/code\u003e, \u0026#39;L\u0026#39; for \u003ccode\u003eLARGE OBJECT\u003c/code\u003e, \u0026#39;n\u0026#39; for \u003ccode\u003eSCHEMA\u003c/code\u003e, \u0026#39;p\u0026#39; for \u003ccode\u003ePARAMETER\u003c/code\u003e, \u0026#39;t\u0026#39; for \u003ccode\u003eTABLESPACE\u003c/code\u003e, \u0026#39;F\u0026#39; for \u003ccode\u003eFOREIGN DATA WRAPPER\u003c/code\u003e, \u0026#39;S\u0026#39; for \u003ccode\u003eFOREIGN SERVER\u003c/code\u003e, or \u0026#39;T\u0026#39; for \u003ccode\u003eTYPE\u003c/code\u003e or \u003ccode\u003eDOMAIN\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eaclexplode\u003c/code\u003e ( \u003ccode\u003eaclitem[]\u003c/code\u003e ) → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003egrantor\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivilege_type\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eis_grantable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode\u003eaclitem\u003c/code\u003e array as a set of rows. If the grantee is the pseudo-role PUBLIC, it is represented by zero in the \u003cem\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e column. Each granted privilege is represented as \u003ccode\u003eSELECT\u003c/code\u003e, \u003ccode\u003eINSERT\u003c/code\u003e, etc (see \u003ca href=\"/docs/18/ddl-priv.html#PRIVILEGE-ABBREVS-TABLE\" rel=\"nofollow\"\u003eTable 5.1\u003c/a\u003e for a full list). Note that each privilege is broken out as a separate row, so only one keyword appears in the \u003cem\u003e\u003ccode\u003eprivilege_type\u003c/code\u003e\u003c/em\u003e column.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003emakeaclitem\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003egrantor\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eprivileges\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eis_grantable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e ) → \u003ccode\u003eaclitem\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConstructs an \u003ccode\u003eaclitem\u003c/code\u003e with the given properties. \u003cem\u003e\u003ccode\u003eprivileges\u003c/code\u003e\u003c/em\u003e is a comma-separated list of privilege names such as \u003ccode\u003eSELECT\u003c/code\u003e, \u003ccode\u003eINSERT\u003c/code\u003e, etc, all of which are set in the result. (Case of the privilege string is not significant, and extra whitespace is allowed between but not within privilege names.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-SCHEMA\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.3. Schema Visibility Inquiry Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-SCHEMA-TABLE\" rel=\"nofollow\"\u003eTable 9.75\u003c/a\u003e shows functions that determine whether a certain object is \u003cem\u003evisible\u003c/em\u003e in the current schema search path. For example, a table is said to be visible if its containing schema is in the search path and no table of the same name appears earlier in the search path. This is equivalent to the statement that the table can be referenced by name without explicit schema qualification. Thus, to list the names of all visible tables:\u003c/p\u003e\n\u003cpre\u003eSELECT relname FROM pg_class WHERE pg_table_is_visible(oid);\n\u003c/pre\u003e\n\u003cp\u003eFor functions and operators, an object in the search path is said to be visible if there is no object of the same name \u003cspan\u003e\u003cem\u003eand argument data type(s)\u003c/em\u003e\u003c/span\u003e earlier in the path. For operator classes and families, both the name and the associated index access method are considered.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-SCHEMA-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.75. Schema Visibility Inquiry Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_collation_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs collation visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_conversion_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003econversion\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs conversion visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_function_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003efunction\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs function visible in search path? (This also works for procedures and aggregates.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_opclass_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eopclass\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator class visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_operator_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eoperator\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_opfamily_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eopclass\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator family visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_statistics_obj_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003estat\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs statistics object visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_table_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs table visible in search path? (This works for all types of relations, including views, materialized views, indexes, sequences and foreign tables.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_ts_config_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003econfig\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search configuration visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_ts_dict_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search dictionary visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_ts_parser_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eparser\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search parser visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_ts_template_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etemplate\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search template visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_type_is_visible\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs type (or domain) visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003eAll these functions require object OIDs to identify the object to be checked. If you want to test an object by name, it is convenient to use the OID alias types (\u003ccode\u003eregclass\u003c/code\u003e, \u003ccode\u003eregtype\u003c/code\u003e, \u003ccode\u003eregprocedure\u003c/code\u003e, \u003ccode\u003eregoperator\u003c/code\u003e, \u003ccode\u003eregconfig\u003c/code\u003e, or \u003ccode\u003eregdictionary\u003c/code\u003e), for example:\u003c/p\u003e\n\u003cpre\u003eSELECT pg_type_is_visible(\u0026#39;myschema.widget\u0026#39;::regtype);\n\u003c/pre\u003e\n\u003cp\u003eNote that it would not make much sense to test a non-schema-qualified type name in this way — if the name can be recognized at all, it must be visible.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-CATALOG\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.4. System Catalog Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE\" rel=\"nofollow\"\u003eTable 9.76\u003c/a\u003e lists functions that extract information from the system catalogs.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-CATALOG-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.76. System Catalog Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd id=\"FORMAT-TYPE\"\u003e\n\u003cp\u003e \u003ccode\u003eformat_type\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003etypemod\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the SQL name for a data type that is identified by its type OID and possibly a type modifier. Pass NULL for the type modifier if no specific modifier is known.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_basetype\u003c/code\u003e ( \u003ccode\u003eregtype\u003c/code\u003e ) → \u003ccode\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the base type of a domain identified by its type OID. If the argument is the OID of a non-domain type, returns the argument as-is. Returns NULL if the argument is not a valid type OID. If there\u0026#39;s a chain of domain dependencies, it will recurse until finding the base type.\u003c/p\u003e\n\u003cp\u003eAssuming \u003ccode\u003eCREATE DOMAIN mytext AS text\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epg_basetype(\u0026#39;mytext\u0026#39;::regtype)\u003c/code\u003e → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd id=\"PG-CHAR-TO-ENCODING\"\u003e\n\u003cp\u003e \u003ccode\u003epg_char_to_encoding\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e ) → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConverts the supplied encoding name into an integer representing the internal identifier used in some system catalog tables. Returns \u003ccode\u003e-1\u003c/code\u003e if an unknown encoding name is provided.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd id=\"PG-ENCODING-TO-CHAR\"\u003e\n\u003cp\u003e \u003ccode\u003epg_encoding_to_char\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConverts the integer used as the internal identifier of an encoding in some system catalog tables into a human-readable string. Returns an empty string if an invalid encoding number is provided.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_catalog_foreign_keys\u003c/code\u003e () → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003efktable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eregclass\u003c/code\u003e, \u003cem\u003e\u003ccode\u003efkcols\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e, \u003cem\u003e\u003ccode\u003epktable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eregclass\u003c/code\u003e, \u003cem\u003e\u003ccode\u003epkcols\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eis_array\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eis_opt\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a set of records describing the foreign key relationships that exist within the \u003cspan\u003ePostgreSQL\u003c/span\u003e system catalogs. The \u003cem\u003e\u003ccode\u003efktable\u003c/code\u003e\u003c/em\u003e column contains the name of the referencing catalog, and the \u003cem\u003e\u003ccode\u003efkcols\u003c/code\u003e\u003c/em\u003e column contains the name(s) of the referencing column(s). Similarly, the \u003cem\u003e\u003ccode\u003epktable\u003c/code\u003e\u003c/em\u003e column contains the name of the referenced catalog, and the \u003cem\u003e\u003ccode\u003epkcols\u003c/code\u003e\u003c/em\u003e column contains the name(s) of the referenced column(s). If \u003cem\u003e\u003ccode\u003eis_array\u003c/code\u003e\u003c/em\u003e is true, the last referencing column is an array, each of whose elements should match some entry in the referenced catalog. If \u003cem\u003e\u003ccode\u003eis_opt\u003c/code\u003e\u003c/em\u003e is true, the referencing column(s) are allowed to contain zeroes instead of a valid reference.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_constraintdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003econstraint\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a constraint. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_expr\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eexpr\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_node_tree\u003c/code\u003e, \u003cem\u003e\u003ccode\u003erelation\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDecompiles the internal form of an expression stored in the system catalogs, such as the default value for a column. If the expression might contain Vars, specify the OID of the relation they refer to as the second parameter; if no Vars are expected, passing zero is sufficient.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_functiondef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a function or procedure. (This is a decompiled reconstruction, not the original text of the command.) The result is a complete \u003ccode\u003eCREATE OR REPLACE FUNCTION\u003c/code\u003e or \u003ccode\u003eCREATE OR REPLACE PROCEDURE\u003c/code\u003e statement.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_function_arguments\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the argument list of a function or procedure, in the form it would need to appear in within \u003ccode\u003eCREATE FUNCTION\u003c/code\u003e (including default values).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_function_identity_arguments\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the argument list necessary to identify a function or procedure, in the form it would need to appear in within commands such as \u003ccode\u003eALTER FUNCTION\u003c/code\u003e. This form omits default values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_function_result\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the \u003ccode\u003eRETURNS\u003c/code\u003e clause of a function, in the form it would need to appear in within \u003ccode\u003eCREATE FUNCTION\u003c/code\u003e. Returns \u003ccode\u003eNULL\u003c/code\u003e for a procedure.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_indexdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for an index. (This is a decompiled reconstruction, not the original text of the command.) If \u003cem\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e is supplied and is not zero, only the definition of that column is reconstructed.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_keywords\u003c/code\u003e () → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eword\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecatcode\u003c/code\u003e\u003c/em\u003e \u003ccode\u003e\u0026#34;char\u0026#34;\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ebarelabel\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecatdesc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ebaredesc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a set of records describing the SQL keywords recognized by the server. The \u003cem\u003e\u003ccode\u003eword\u003c/code\u003e\u003c/em\u003e column contains the keyword. The \u003cem\u003e\u003ccode\u003ecatcode\u003c/code\u003e\u003c/em\u003e column contains a category code: \u003ccode\u003eU\u003c/code\u003e for an unreserved keyword, \u003ccode\u003eC\u003c/code\u003e for a keyword that can be a column name, \u003ccode\u003eT\u003c/code\u003e for a keyword that can be a type or function name, or \u003ccode\u003eR\u003c/code\u003e for a fully reserved keyword. The \u003cem\u003e\u003ccode\u003ebarelabel\u003c/code\u003e\u003c/em\u003e column contains \u003ccode\u003etrue\u003c/code\u003e if the keyword can be used as a \u003cspan\u003e“\u003cspan\u003ebare\u003c/span\u003e”\u003c/span\u003e column label in \u003ccode\u003eSELECT\u003c/code\u003e lists, or \u003ccode\u003efalse\u003c/code\u003e if it can only be used after \u003ccode\u003eAS\u003c/code\u003e. The \u003cem\u003e\u003ccode\u003ecatdesc\u003c/code\u003e\u003c/em\u003e column contains a possibly-localized string describing the keyword\u0026#39;s category. The \u003cem\u003e\u003ccode\u003ebaredesc\u003c/code\u003e\u003c/em\u003e column contains a possibly-localized string describing the keyword\u0026#39;s column label status.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_partition_constraintdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the definition of a partition constraint. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_partkeydef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the definition of a partitioned table\u0026#39;s partition key, in the form it would have in the \u003ccode\u003ePARTITION BY\u003c/code\u003e clause of \u003ccode\u003eCREATE TABLE\u003c/code\u003e. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_ruledef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003erule\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a rule. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_serial_sequence\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the sequence associated with a column, or NULL if no sequence is associated with the column. If the column is an identity column, the associated sequence is the sequence internally created for that column. For columns created using one of the serial types (\u003ccode\u003eserial\u003c/code\u003e, \u003ccode\u003esmallserial\u003c/code\u003e, \u003ccode\u003ebigserial\u003c/code\u003e), it is the sequence created for that serial column definition. In the latter case, the association can be modified or removed with \u003ccode\u003eALTER SEQUENCE OWNED BY\u003c/code\u003e. (This function probably should have been called \u003ccode\u003epg_get_owned_sequence\u003c/code\u003e; its current name reflects the fact that it has historically been used with serial-type columns.) The first parameter is a table name with optional schema, and the second parameter is a column name. Because the first parameter potentially contains both schema and table names, it is parsed per usual SQL rules, meaning it is lower-cased by default. The second parameter, being just a column name, is treated literally and so has its case preserved. The result is suitably formatted for passing to the sequence functions (see \u003ca href=\"/docs/18/functions-sequence.html\" rel=\"nofollow\"\u003eSection 9.17\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eA typical use is in reading the current value of the sequence for an identity or serial column, for example:\u003c/p\u003e\n\u003cpre\u003e\nSELECT currval(pg_get_serial_sequence(\u0026#39;sometable\u0026#39;, \u0026#39;id\u0026#39;));\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_statisticsobjdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003estatobj\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for an extended statistics object. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_triggerdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etrigger\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a trigger. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_userbyid\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003erole\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a role\u0026#39;s name given its OID.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_viewdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode\u003eSELECT\u003c/code\u003e command for a view or materialized view. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003epg_get_viewdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ewrap_column\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode\u003eSELECT\u003c/code\u003e command for a view or materialized view. (This is a decompiled reconstruction, not the original text of the command.) In this form of the function, pretty-printing is always enabled, and long lines are wrapped to try to keep them shorter than the specified number of columns.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003epg_get_viewdef\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e [\u003cspan\u003e, \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode\u003eSELECT\u003c/code\u003e command for a view or materialized view, working from a textual name for the view rather than its OID. (This is deprecated; use the OID variant instead.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_index_column_has_property\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eregclass\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index column has the named property. Common index column properties are listed in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEX-COLUMN-PROPS\" rel=\"nofollow\"\u003eTable 9.77\u003c/a\u003e. (Note that extension access methods can define additional property names for their indexes.) \u003ccode\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID or column number does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_index_has_property\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eregclass\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index has the named property. Common index properties are listed in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEX-PROPS\" rel=\"nofollow\"\u003eTable 9.78\u003c/a\u003e. (Note that extension access methods can define additional property names for their indexes.) \u003ccode\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_indexam_has_property\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eam\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index access method has the named property. Access method properties are listed in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEXAM-PROPS\" rel=\"nofollow\"\u003eTable 9.79\u003c/a\u003e. \u003ccode\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_options_to_table\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eoptions_array\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e ) → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eoption_name\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eoption_value\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the set of storage options represented by a value from \u003ccode\u003epg_class\u003c/code\u003e.\u003ccode\u003ereloptions\u003c/code\u003e or \u003ccode\u003epg_attribute\u003c/code\u003e.\u003ccode\u003eattoptions\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_settings_get_flags\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eguc\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003etext[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the flags associated with the given GUC, or \u003ccode\u003eNULL\u003c/code\u003e if it does not exist. The result is an empty array if the GUC exists but there are no flags to show. Only the most useful flags listed in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SETTINGS-FLAGS\" rel=\"nofollow\"\u003eTable 9.80\u003c/a\u003e are exposed.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_tablespace_databases\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003esetof oid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of OIDs of databases that have objects stored in the specified tablespace. If this function returns any rows, the tablespace is not empty and cannot be dropped. To identify the specific objects populating the tablespace, you will need to connect to the database(s) identified by \u003ccode\u003epg_tablespace_databases\u003c/code\u003e and query their \u003ccode\u003epg_class\u003c/code\u003e catalogs.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_tablespace_location\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the file system path that this tablespace is located in.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_typeof\u003c/code\u003e ( \u003ccode\u003e\u0026#34;any\u0026#34;\u003c/code\u003e ) → \u003ccode\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the data type of the value that is passed to it. This can be helpful for troubleshooting or dynamically constructing SQL queries. The function is declared as returning \u003ccode\u003eregtype\u003c/code\u003e, which is an OID alias type (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); this means that it is the same as an OID for comparison purposes but displays as a type name.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epg_typeof(33)\u003c/code\u003e → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eCOLLATION FOR\u003c/code\u003e ( \u003ccode\u003e\u0026#34;any\u0026#34;\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the collation of the value that is passed to it. The value is quoted and schema-qualified if necessary. If no collation was derived for the argument expression, then \u003ccode\u003eNULL\u003c/code\u003e is returned. If the argument is not of a collatable data type, then an error is raised.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ecollation for (\u0026#39;foo\u0026#39;::text)\u003c/code\u003e → \u003ccode\u003e\u0026#34;default\u0026#34;\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ecollation for (\u0026#39;foo\u0026#39; COLLATE \u0026#34;de_DE\u0026#34;)\u003c/code\u003e → \u003ccode\u003e\u0026#34;de_DE\u0026#34;\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regclass\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregclass\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual relation name to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregclass\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regcollation\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregcollation\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual collation name to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregcollation\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regnamespace\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregnamespace\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual schema name to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregnamespace\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regoper\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregoper\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual operator name to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregoper\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found or is ambiguous.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regoperator\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregoperator\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual operator name (with parameter types) to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregoperator\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regproc\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregproc\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual function or procedure name to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregproc\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found or is ambiguous.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regprocedure\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregprocedure\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual function or procedure name (with argument types) to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregprocedure\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regrole\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregrole\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual role name to its OID. A similar result is obtained by casting the string to type \u003ccode\u003eregrole\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd id=\"TO-REGTYPE\"\u003e\n\u003cp\u003e \u003ccode\u003eto_regtype\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a string of text, extracts a potential type name from it, and translates that name into a type OID. A syntax error in the string will result in an error; but if the string is a syntactically valid type name that happens not to be found in the catalogs, the result is \u003ccode\u003eNULL\u003c/code\u003e. A similar result is obtained by casting the string to type \u003ccode\u003eregtype\u003c/code\u003e (see \u003ca href=\"/docs/18/datatype-oid.html\" rel=\"nofollow\"\u003eSection 8.19\u003c/a\u003e), except that that will throw error for name not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eto_regtypemod\u003c/code\u003e ( \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a string of text, extracts a potential type name from it, and translates its type modifier, if any. A syntax error in the string will result in an error; but if the string is a syntactically valid type name that happens not to be found in the catalogs, the result is \u003ccode\u003eNULL\u003c/code\u003e. The result is \u003ccode\u003e-1\u003c/code\u003e if no type modifier is present.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eto_regtypemod\u003c/code\u003e can be combined with \u003ca href=\"/docs/18/functions-info.html#TO-REGTYPE\" rel=\"nofollow\"\u003eto_regtype\u003c/a\u003e to produce appropriate inputs for \u003ca href=\"/docs/18/functions-info.html#FORMAT-TYPE\" rel=\"nofollow\"\u003eformat_type\u003c/a\u003e, allowing a string representing a type name to be canonicalized.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eformat_type(to_regtype(\u0026#39;varchar(32)\u0026#39;), to_regtypemod(\u0026#39;varchar(32)\u0026#39;))\u003c/code\u003e → \u003ccode\u003echaracter varying(32)\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003eMost of the functions that reconstruct (decompile) database objects have an optional \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e flag, which if \u003ccode\u003etrue\u003c/code\u003e causes the result to be \u003cspan\u003e“\u003cspan\u003epretty-printed\u003c/span\u003e”\u003c/span\u003e. Pretty-printing suppresses unnecessary parentheses and adds whitespace for legibility. The pretty-printed format is more readable, but the default format is more likely to be interpreted the same way by future versions of \u003cspan\u003ePostgreSQL\u003c/span\u003e; so avoid using pretty-printed output for dump purposes. Passing \u003ccode\u003efalse\u003c/code\u003e for the \u003cem\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e parameter yields the same result as omitting the parameter.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-INDEX-COLUMN-PROPS\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.77. Index Column Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003easc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort in ascending order on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edesc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort in descending order on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enulls_first\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort with nulls first on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enulls_last\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort with nulls last on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eorderable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column possess any defined sort ordering?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edistance_orderable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the column be scanned in order by a \u003cspan\u003e“\u003cspan\u003edistance\u003c/span\u003e”\u003c/span\u003e operator, for example \u003ccode\u003eORDER BY col \u0026lt;-\u0026gt; constant\u003c/code\u003e ?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ereturnable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the column value be returned by an index-only scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003esearch_array\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column natively support \u003ccode\u003ecol = ANY(array)\u003c/code\u003e searches?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003esearch_nulls\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column support \u003ccode\u003eIS NULL\u003c/code\u003e and \u003ccode\u003eIS NOT NULL\u003c/code\u003e searches?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-INDEX-PROPS\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.78. Index Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eclusterable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the index be used in a \u003ccode\u003eCLUSTER\u003c/code\u003e command?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eindex_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the index support plain (non-bitmap) scans?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebitmap_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the index support bitmap scans?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebackward_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the scan direction be changed in mid-scan (to support \u003ccode\u003eFETCH BACKWARD\u003c/code\u003e on a cursor without needing materialization)?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-INDEXAM-PROPS\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.79. Index Access Method Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecan_order\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support \u003ccode\u003eASC\u003c/code\u003e, \u003ccode\u003eDESC\u003c/code\u003e and related keywords in \u003ccode\u003eCREATE INDEX\u003c/code\u003e?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecan_unique\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support unique indexes?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecan_multi_col\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support indexes with multiple columns?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecan_exclude\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support exclusion constraints?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecan_include\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support the \u003ccode\u003eINCLUDE\u003c/code\u003e clause of \u003ccode\u003eCREATE INDEX\u003c/code\u003e?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-PG-SETTINGS-FLAGS\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.80. GUC Flags\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFlag\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eEXPLAIN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are included in \u003ccode\u003eEXPLAIN (SETTINGS)\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eNO_SHOW_ALL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are excluded from \u003ccode\u003eSHOW ALL\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eNO_RESET\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag do not support \u003ccode\u003eRESET\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eNO_RESET_ALL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are excluded from \u003ccode\u003eRESET ALL\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eNOT_IN_SAMPLE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are not included in \u003ccode\u003epostgresql.conf\u003c/code\u003e by default.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eRUNTIME_COMPUTED\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are runtime-computed ones.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-OBJECT\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.5. Object Information and Addressing Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-OBJECT-TABLE\" rel=\"nofollow\"\u003eTable 9.81\u003c/a\u003e lists functions related to database object identification and addressing.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-OBJECT-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.81. Object Information and Addressing Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_acl\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the ACL for a database object, specified by catalog OID, object OID and sub-object ID. This function returns \u003ccode\u003eNULL\u003c/code\u003e values for undefined objects.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_describe_object\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a textual description of a database object identified by catalog OID, object OID, and sub-object ID (such as a column number within a table; the sub-object ID is zero when referring to a whole object). This description is intended to be human-readable, and might be translated, depending on server configuration. This is especially useful to determine the identity of an object referenced in the \u003ccode\u003epg_depend\u003c/code\u003e catalog. This function returns \u003ccode\u003eNULL\u003c/code\u003e values for undefined objects.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_identify_object\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eidentity\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by catalog OID, object OID and sub-object ID. This information is intended to be machine-readable, and is never translated. \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e identifies the type of database object; \u003cem\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e is the schema name that the object belongs in, or \u003ccode\u003eNULL\u003c/code\u003e for object types that do not belong to schemas; \u003cem\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e is the name of the object, quoted if necessary, if the name (along with schema name, if pertinent) is sufficient to uniquely identify the object, otherwise \u003ccode\u003eNULL\u003c/code\u003e; \u003cem\u003e\u003ccode\u003eidentity\u003c/code\u003e\u003c/em\u003e is the complete object identity, with the precise format depending on object type, and each name within the format being schema-qualified and quoted as necessary. Undefined objects are identified with \u003ccode\u003eNULL\u003c/code\u003e values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_identify_object_as_address\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by catalog OID, object OID and sub-object ID. The returned information is independent of the current server, that is, it could be used to identify an identically named object in another server. \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e identifies the type of database object; \u003cem\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e and \u003cem\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e are text arrays that together form a reference to the object. These three values can be passed to \u003ccode\u003epg_get_object_address\u003c/code\u003e to obtain the internal address of the object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_object_address\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext[]\u003c/code\u003e ) → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by a type code and object name and argument arrays. The returned values are the ones that would be used in system catalogs such as \u003ccode\u003epg_depend\u003c/code\u003e; they can be passed to other system functions such as \u003ccode\u003epg_describe_object\u003c/code\u003e or \u003ccode\u003epg_identify_object\u003c/code\u003e. \u003cem\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e is the OID of the system catalog containing the object; \u003cem\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e is the OID of the object itself, and \u003cem\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e is the sub-object ID, or zero if none. This function is the inverse of \u003ccode\u003epg_identify_object_as_address\u003c/code\u003e. Undefined objects are identified with \u003ccode\u003eNULL\u003c/code\u003e values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003e\u003ccode\u003epg_get_acl\u003c/code\u003e is useful for retrieving and inspecting the privileges associated with database objects without looking at specific catalogs. For example, to retrieve all the granted privileges on objects in the current database:\u003c/p\u003e\n\u003cpre\u003epostgres=# SELECT\n    (pg_identify_object(s.classid,s.objid,s.objsubid)).*,\n    pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl\nFROM pg_catalog.pg_shdepend AS s\nJOIN pg_catalog.pg_database AS d\n    ON d.datname = current_database() AND\n       d.oid = s.dbid\nJOIN pg_catalog.pg_authid AS a\n    ON a.oid = s.refobjid AND\n       s.refclassid = \u0026#39;pg_authid\u0026#39;::regclass\nWHERE s.deptype = \u0026#39;a\u0026#39;;\n-[ RECORD 1 ]-----------------------------------------\ntype     | table\nschema   | public\nname     | testtab\nidentity | public.testtab\nacl      | {postgres=arwdDxtm/postgres,foo=r/postgres}\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-COMMENT\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.6. Comment Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\" rel=\"nofollow\"\u003eTable 9.82\u003c/a\u003e extract comments previously stored with the \u003ca href=\"/docs/18/sql-comment.html\" title=\"COMMENT\" rel=\"nofollow\"\u003e\u003cspan\u003eCOMMENT\u003c/span\u003e\u003c/a\u003e command. A null value is returned if no comment could be found for the specified parameters.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-COMMENT-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.82. Comment Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003ecol_description\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003einteger\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a table column, which is specified by the OID of its table and its column number. (\u003ccode\u003eobj_description\u003c/code\u003e cannot be used for table columns, since columns do not have OIDs of their own.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eobj_description\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecatalog\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a database object specified by its OID and the name of the containing system catalog. For example, \u003ccode\u003eobj_description(123456, \u0026#39;pg_class\u0026#39;)\u003c/code\u003e would retrieve the comment for the table with OID 123456.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003eobj_description\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a database object specified by its OID alone. This is \u003cspan\u003e\u003cem\u003edeprecated\u003c/em\u003e\u003c/span\u003e since there is no guarantee that OIDs are unique across different system catalogs; therefore, the wrong comment might be returned.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eshobj_description\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ecatalog\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ename\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a shared database object specified by its OID and the name of the containing system catalog. This is just like \u003ccode\u003eobj_description\u003c/code\u003e except that it is used for retrieving comments on shared objects (that is, databases, roles, and tablespaces). Some system catalogs are global to all databases within each cluster, and the descriptions for objects in them are stored globally as well.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-VALIDITY\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.7. Data Validity Checking Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-VALIDITY-TABLE\" rel=\"nofollow\"\u003eTable 9.83\u003c/a\u003e can be helpful for checking validity of proposed input data.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-VALIDITY-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.83. Data Validity Checking Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003cp\u003eExample(s)\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_input_is_valid\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether the given \u003cem\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e is valid input for the specified data type, returning true or false.\u003c/p\u003e\n\u003cp\u003eThis function will only work as desired if the data type\u0026#39;s input function has been updated to report invalid input as a \u003cspan\u003e“\u003cspan\u003esoft\u003c/span\u003e”\u003c/span\u003e error. Otherwise, invalid input will abort the transaction, just as if the string had been cast to the type directly.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epg_input_is_valid(\u0026#39;42\u0026#39;, \u0026#39;integer\u0026#39;)\u003c/code\u003e → \u003ccode\u003et\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epg_input_is_valid(\u0026#39;42000000000\u0026#39;, \u0026#39;integer\u0026#39;)\u003c/code\u003e → \u003ccode\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003epg_input_is_valid(\u0026#39;1234.567\u0026#39;, \u0026#39;numeric(7,4)\u0026#39;)\u003c/code\u003e → \u003ccode\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_input_error_info\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e ) → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003emessage\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003edetail\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ehint\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e, \u003cem\u003e\u003ccode\u003esql_error_code\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eTests whether the given \u003cem\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e is valid input for the specified data type; if not, return the details of the error that would have been thrown. If the input is valid, the results are NULL. The inputs are the same as for \u003ccode\u003epg_input_is_valid\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThis function will only work as desired if the data type\u0026#39;s input function has been updated to report invalid input as a \u003cspan\u003e“\u003cspan\u003esoft\u003c/span\u003e”\u003c/span\u003e error. Otherwise, invalid input will abort the transaction, just as if the string had been cast to the type directly.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eSELECT * FROM pg_input_error_info(\u0026#39;42000000000\u0026#39;, \u0026#39;integer\u0026#39;)\u003c/code\u003e →\u003c/p\u003e\n\u003cpre\u003e\n                       message                        | detail | hint | sql_error_code\n------------------------------------------------------+--------+------+----------------\n value \u0026#34;42000000000\u0026#34; is out of range for type integer |        |      | 22003\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-SNAPSHOT\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.8. Transaction ID and Snapshot Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT\" rel=\"nofollow\"\u003eTable 9.84\u003c/a\u003e provide server transaction information in an exportable form. The main use of these functions is to determine which transactions were committed between two snapshots.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-PG-SNAPSHOT\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.84. Transaction ID and Snapshot Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eage\u003c/code\u003e ( \u003ccode\u003exid\u003c/code\u003e ) → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the number of transactions between the supplied transaction id and the current transaction counter.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003emxid_age\u003c/code\u003e ( \u003ccode\u003exid\u003c/code\u003e ) → \u003ccode\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the number of multixacts IDs between the supplied multixact ID and the current multixacts counter.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_current_xact_id\u003c/code\u003e () → \u003ccode\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current transaction\u0026#39;s ID. It will assign a new one if the current transaction does not have one already (because it has not performed any database updates); see \u003ca href=\"/docs/18/transaction-id.html\" rel=\"nofollow\"\u003eSection 67.1\u003c/a\u003e for details. If executed in a subtransaction, this will return the top-level transaction ID; see \u003ca href=\"/docs/18/subxacts.html\" rel=\"nofollow\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_current_xact_id_if_assigned\u003c/code\u003e () → \u003ccode\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current transaction\u0026#39;s ID, or \u003ccode\u003eNULL\u003c/code\u003e if no ID is assigned yet. (It\u0026#39;s best to use this variant if the transaction might otherwise be read-only, to avoid unnecessary consumption of an XID.) If executed in a subtransaction, this will return the top-level transaction ID.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_xact_status\u003c/code\u003e ( \u003ccode\u003exid8\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReports the commit status of a recent transaction. The result is one of \u003ccode\u003ein progress\u003c/code\u003e, \u003ccode\u003ecommitted\u003c/code\u003e, or \u003ccode\u003eaborted\u003c/code\u003e, provided that the transaction is recent enough that the system retains the commit status of that transaction. If it is old enough that no references to the transaction survive in the system and the commit status information has been discarded, the result is \u003ccode\u003eNULL\u003c/code\u003e. Applications might use this function, for example, to determine whether their transaction committed or aborted after the application and database server become disconnected while a \u003ccode\u003eCOMMIT\u003c/code\u003e is in progress. Note that prepared transactions are reported as \u003ccode\u003ein progress\u003c/code\u003e; applications must check \u003ca href=\"/docs/18/view-pg-prepared-xacts.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_prepared_xacts\u003c/code\u003e\u003c/a\u003e if they need to determine whether a transaction ID belongs to a prepared transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_current_snapshot\u003c/code\u003e () → \u003ccode\u003epg_snapshot\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a current \u003cem\u003esnapshot\u003c/em\u003e, a data structure showing which transaction IDs are now in-progress. Only top-level transaction IDs are included in the snapshot; subtransaction IDs are not shown; see \u003ca href=\"/docs/18/subxacts.html\" rel=\"nofollow\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_snapshot_xip\u003c/code\u003e ( \u003ccode\u003epg_snapshot\u003c/code\u003e ) → \u003ccode\u003esetof xid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of in-progress transaction IDs contained in a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_snapshot_xmax\u003c/code\u003e ( \u003ccode\u003epg_snapshot\u003c/code\u003e ) → \u003ccode\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode\u003exmax\u003c/code\u003e of a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_snapshot_xmin\u003c/code\u003e ( \u003ccode\u003epg_snapshot\u003c/code\u003e ) → \u003ccode\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode\u003exmin\u003c/code\u003e of a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_visible_in_snapshot\u003c/code\u003e ( \u003ccode\u003exid8\u003c/code\u003e, \u003ccode\u003epg_snapshot\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs the given transaction ID \u003cem\u003evisible\u003c/em\u003e according to this snapshot (that is, was it completed before the snapshot was taken)? Note that this function will not give the correct answer for a subtransaction ID (subxid); see \u003ca href=\"/docs/18/subxacts.html\" rel=\"nofollow\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_multixact_members\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003emultixid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003exid\u003c/code\u003e ) → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003exid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003emode\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the transaction ID and lock mode for each member of the specified multixact ID. The lock modes \u003ccode\u003eforupd\u003c/code\u003e, \u003ccode\u003efornokeyupd\u003c/code\u003e, \u003ccode\u003esh\u003c/code\u003e, and \u003ccode\u003ekeysh\u003c/code\u003e correspond to the row-level locks \u003ccode\u003eFOR UPDATE\u003c/code\u003e, \u003ccode\u003eFOR NO KEY UPDATE\u003c/code\u003e, \u003ccode\u003eFOR SHARE\u003c/code\u003e, and \u003ccode\u003eFOR KEY SHARE\u003c/code\u003e, respectively, as described in \u003ca href=\"/docs/18/explicit-locking.html#LOCKING-ROWS\" rel=\"nofollow\"\u003eSection 13.3.2\u003c/a\u003e. Two additional modes are specific to multixacts: \u003ccode\u003enokeyupd\u003c/code\u003e, used by updates that do not modify key columns, and \u003ccode\u003eupd\u003c/code\u003e, used by updates or deletes that modify key columns.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003eThe internal transaction ID type \u003ccode\u003exid\u003c/code\u003e is 32 bits wide and wraps around every 4 billion transactions. However, the functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT\" rel=\"nofollow\"\u003eTable 9.84\u003c/a\u003e, except \u003ccode\u003eage\u003c/code\u003e, \u003ccode\u003emxid_age\u003c/code\u003e, and \u003ccode\u003epg_get_multixact_members\u003c/code\u003e, use a 64-bit type \u003ccode\u003exid8\u003c/code\u003e that does not wrap around during the life of an installation and can be converted to \u003ccode\u003exid\u003c/code\u003e by casting if required; see \u003ca href=\"/docs/18/transaction-id.html\" rel=\"nofollow\"\u003eSection 67.1\u003c/a\u003e for details. The data type \u003ccode\u003epg_snapshot\u003c/code\u003e stores information about transaction ID visibility at a particular moment in time. Its components are described in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT-PARTS\" rel=\"nofollow\"\u003eTable 9.85\u003c/a\u003e. \u003ccode\u003epg_snapshot\u003c/code\u003e\u0026#39;s textual representation is \u003ccode\u003e\u003cem\u003e\u003ccode\u003exmin\u003c/code\u003e\u003c/em\u003e:\u003cem\u003e\u003ccode\u003exmax\u003c/code\u003e\u003c/em\u003e:\u003cem\u003e\u003ccode\u003exip_list\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e. For example \u003ccode\u003e10:20:10,14,15\u003c/code\u003e means \u003ccode\u003exmin=10, xmax=20, xip_list=10, 14, 15\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-PG-SNAPSHOT-PARTS\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.85. Snapshot Components\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003exmin\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLowest transaction ID that was still active. All transaction IDs less than \u003ccode\u003exmin\u003c/code\u003e are either committed and visible, or rolled back and dead.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003exmax\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOne past the highest completed transaction ID. All transaction IDs greater than or equal to \u003ccode\u003exmax\u003c/code\u003e had not yet completed as of the time of the snapshot, and thus are invisible.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003exip_list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTransactions in progress at the time of the snapshot. A transaction ID that is \u003ccode\u003exmin \u0026lt;= \u003cem\u003e\u003ccode\u003eX\u003c/code\u003e\u003c/em\u003e \u0026lt; xmax\u003c/code\u003e and not in this list was already completed at the time of the snapshot, and thus is either visible or dead according to its commit status. This list does not include the transaction IDs of subtransactions (subxids).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003eIn releases of \u003cspan\u003ePostgreSQL\u003c/span\u003e before 13 there was no \u003ccode\u003exid8\u003c/code\u003e type, so variants of these functions were provided that used \u003ccode\u003ebigint\u003c/code\u003e to represent a 64-bit XID, with a correspondingly distinct snapshot data type \u003ccode\u003etxid_snapshot\u003c/code\u003e. These older functions have \u003ccode\u003etxid\u003c/code\u003e in their names. They are still supported for backward compatibility, but may be removed from a future release. See \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-TXID-SNAPSHOT\" rel=\"nofollow\"\u003eTable 9.86\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-TXID-SNAPSHOT\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.86. Deprecated Transaction ID and Snapshot Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_current\u003c/code\u003e () → \u003ccode\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_current_xact_id()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_current_if_assigned\u003c/code\u003e () → \u003ccode\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_current_xact_id_if_assigned()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_current_snapshot\u003c/code\u003e () → \u003ccode\u003etxid_snapshot\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_current_snapshot()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_snapshot_xip\u003c/code\u003e ( \u003ccode\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode\u003esetof bigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_snapshot_xip()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_snapshot_xmax\u003c/code\u003e ( \u003ccode\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_snapshot_xmax()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_snapshot_xmin\u003c/code\u003e ( \u003ccode\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_snapshot_xmin()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_visible_in_snapshot\u003c/code\u003e ( \u003ccode\u003ebigint\u003c/code\u003e, \u003ccode\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_visible_in_snapshot()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003etxid_status\u003c/code\u003e ( \u003ccode\u003ebigint\u003c/code\u003e ) → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003epg_xact_status()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-COMMIT-TIMESTAMP\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.9. Committed Transaction Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-COMMIT-TIMESTAMP\" rel=\"nofollow\"\u003eTable 9.87\u003c/a\u003e provide information about when past transactions were committed. They only provide useful data when the \u003ca href=\"/docs/18/runtime-config-replication.html#GUC-TRACK-COMMIT-TIMESTAMP\" rel=\"nofollow\"\u003etrack_commit_timestamp\u003c/a\u003e configuration option is enabled, and only for transactions that were committed after it was enabled. Commit timestamp information is routinely removed during vacuum.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-COMMIT-TIMESTAMP\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.87. Committed Transaction Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_xact_commit_timestamp\u003c/code\u003e ( \u003ccode\u003exid\u003c/code\u003e ) → \u003ccode\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the commit timestamp of a transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_xact_commit_timestamp_origin\u003c/code\u003e ( \u003ccode\u003exid\u003c/code\u003e ) → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etimestamp\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etimestamp with time zone\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eroident\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eReturns the commit timestamp and replication origin of a transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_last_committed_xact\u003c/code\u003e () → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003exid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003etimestamp\u003c/code\u003e\u003c/em\u003e \u003ccode\u003etimestamp with time zone\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eroident\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the transaction ID, commit timestamp and replication origin of the latest committed transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-CONTROLDATA\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.10. Control Data Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-CONTROLDATA\" rel=\"nofollow\"\u003eTable 9.88\u003c/a\u003e print information initialized during \u003ccode\u003einitdb\u003c/code\u003e, such as the catalog version. They also show information about write-ahead logging and checkpoint processing. This information is cluster-wide, not specific to any one database. These functions provide most of the same information, from the same source, as the \u003ca href=\"/docs/18/app-pgcontroldata.html\" title=\"pg_controldata\" rel=\"nofollow\"\u003e\u003cspan\u003e\u003cspan\u003epg_controldata\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e application.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-CONTROLDATA\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.88. Control Data Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_control_checkpoint\u003c/code\u003e () → \u003ccode\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about current checkpoint state, as shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-CHECKPOINT\" rel=\"nofollow\"\u003eTable 9.89\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_control_system\u003c/code\u003e () → \u003ccode\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about current control file state, as shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-SYSTEM\" rel=\"nofollow\"\u003eTable 9.90\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_control_init\u003c/code\u003e () → \u003ccode\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about cluster initialization state, as shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-INIT\" rel=\"nofollow\"\u003eTable 9.91\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_control_recovery\u003c/code\u003e () → \u003ccode\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about recovery state, as shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-RECOVERY\" rel=\"nofollow\"\u003eTable 9.92\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-PG-CONTROL-CHECKPOINT\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.89. \u003ccode\u003epg_control_checkpoint\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003echeckpoint_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eredo_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eredo_wal_file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etext\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etimeline_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eprev_timeline_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003efull_page_writes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enext_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etext\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enext_oid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enext_multixact_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enext_multi_offset\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eoldest_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eoldest_xid_dbid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eoldest_active_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eoldest_multi_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eoldest_multi_dbid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eoldest_commit_ts_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003enewest_commit_ts_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003echeckpoint_time\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etimestamp with time zone\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-PG-CONTROL-SYSTEM\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.90. \u003ccode\u003epg_control_system\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003epg_control_version\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecatalog_version_no\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003esystem_identifier\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ebigint\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003epg_control_last_modified\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etimestamp with time zone\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-PG-CONTROL-INIT\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.91. \u003ccode\u003epg_control_init\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emax_data_alignment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edatabase_block_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eblocks_per_segment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ewal_block_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebytes_per_wal_segment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emax_identifier_length\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emax_index_columns\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emax_toast_chunk_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elarge_object_chunk_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003efloat8_pass_by_value\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edata_page_checksum_version\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003edefault_char_signedness\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv id=\"FUNCTIONS-PG-CONTROL-RECOVERY\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.92. \u003ccode\u003epg_control_recovery\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emin_recovery_end_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003emin_recovery_end_timeline\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebackup_start_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ebackup_end_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eend_of_backup_record_required\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-VERSION\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.11. Version Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-VERSION\" rel=\"nofollow\"\u003eTable 9.93\u003c/a\u003e print version information.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-VERSION\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.93. Version Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eversion\u003c/code\u003e () → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string describing the \u003cspan\u003ePostgreSQL\u003c/span\u003e server\u0026#39;s version. You can also get this information from \u003ca href=\"/docs/18/runtime-config-preset.html#GUC-SERVER-VERSION\" rel=\"nofollow\"\u003eserver_version\u003c/a\u003e, or for a machine-readable version use \u003ca href=\"/docs/18/runtime-config-preset.html#GUC-SERVER-VERSION-NUM\" rel=\"nofollow\"\u003eserver_version_num\u003c/a\u003e. Software developers should use \u003ccode\u003eserver_version_num\u003c/code\u003e (available since 8.2) or \u003ca href=\"/docs/18/libpq-status.html#LIBPQ-PQSERVERVERSION\" rel=\"nofollow\"\u003e\u003ccode\u003ePQserverVersion\u003c/code\u003e\u003c/a\u003e instead of parsing the text version.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eunicode_version\u003c/code\u003e () → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string representing the version of Unicode used by \u003cspan\u003ePostgreSQL\u003c/span\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003eicu_unicode_version\u003c/code\u003e () → \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string representing the version of Unicode used by ICU, if the server was built with ICU support; otherwise returns \u003ccode\u003eNULL\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003cdiv id=\"FUNCTIONS-INFO-WAL-SUMMARY\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3\u003e9.27.12. WAL Summarization Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca href=\"/docs/18/functions-info.html#FUNCTIONS-WAL-SUMMARY\" rel=\"nofollow\"\u003eTable 9.94\u003c/a\u003e print information about the status of WAL summarization. See \u003ca href=\"/docs/18/runtime-config-wal.html#GUC-SUMMARIZE-WAL\" rel=\"nofollow\"\u003esummarize_wal\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv id=\"FUNCTIONS-WAL-SUMMARY\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 9.94. WAL Summarization Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_available_wal_summaries\u003c/code\u003e () → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etli\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ebigint\u003c/code\u003e, \u003cem\u003e\u003ccode\u003estart_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_lsn\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eend_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_lsn\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns information about the WAL summary files present in the data directory, under \u003ccode\u003epg_wal/summaries\u003c/code\u003e. One row will be returned per WAL summary file. Each file summarizes WAL on the indicated TLI within the indicated LSN range. This function might be useful to determine whether enough WAL summaries are present on the server to take an incremental backup based on some prior backup whose start LSN is known.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_wal_summary_contents\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003etli\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ebigint\u003c/code\u003e, \u003cem\u003e\u003ccode\u003estart_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_lsn\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eend_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_lsn\u003c/code\u003e ) → \u003ccode\u003esetof record\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003erelfilenode\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ereltablespace\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003ereldatabase\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eoid\u003c/code\u003e, \u003cem\u003e\u003ccode\u003erelforknumber\u003c/code\u003e\u003c/em\u003e \u003ccode\u003esmallint\u003c/code\u003e, \u003cem\u003e\u003ccode\u003erelblocknumber\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ebigint\u003c/code\u003e, \u003cem\u003e\u003ccode\u003eis_limit_block\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns one information about the contents of a single WAL summary file identified by TLI and starting and ending LSNs. Each row with \u003ccode\u003eis_limit_block\u003c/code\u003e false indicates that the block identified by the remaining output columns was modified by at least one WAL record within the range of records summarized by this file. Each row with \u003ccode\u003eis_limit_block\u003c/code\u003e true indicates either that (a) the relation fork was truncated to the length given by \u003ccode\u003erelblocknumber\u003c/code\u003e within the relevant range of WAL records or (b) that the relation fork was created or dropped within the relevant range of WAL records; in such cases, \u003ccode\u003erelblocknumber\u003c/code\u003e will be zero.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e \u003ccode\u003epg_get_wal_summarizer_state\u003c/code\u003e () → \u003ccode\u003erecord\u003c/code\u003e ( \u003cem\u003e\u003ccode\u003esummarized_tli\u003c/code\u003e\u003c/em\u003e \u003ccode\u003ebigint\u003c/code\u003e, \u003cem\u003e\u003ccode\u003esummarized_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_lsn\u003c/code\u003e, \u003cem\u003e\u003ccode\u003epending_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode\u003epg_lsn\u003c/code\u003e, \u003cem\u003e\u003ccode\u003esummarizer_pid\u003c/code\u003e\u003c/em\u003e \u003ccode\u003eint\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns information about the progress of the WAL summarizer. If the WAL summarizer has never run since the instance was started, then \u003ccode\u003esummarized_tli\u003c/code\u003e and \u003ccode\u003esummarized_lsn\u003c/code\u003e will be \u003ccode\u003e0\u003c/code\u003e and \u003ccode\u003e0/0\u003c/code\u003e respectively; otherwise, they will be the TLI and ending LSN of the last WAL summary file written to disk. If the WAL summarizer is currently running, \u003ccode\u003epending_lsn\u003c/code\u003e will be the ending LSN of the last record that it has consumed, which must always be greater than or equal to \u003ccode\u003esummarized_lsn\u003c/code\u003e; if the WAL summarizer is not running, it will be equal to \u003ccode\u003esummarized_lsn\u003c/code\u003e. \u003ccode\u003esummarizer_pid\u003c/code\u003e is the PID of the WAL summarizer process, if it is running, and otherwise NULL.\u003c/p\u003e\n\u003cp\u003eAs a special exception, the WAL summarizer will refuse to generate WAL summary files if run on WAL generated under \u003ccode\u003ewal_level=minimal\u003c/code\u003e, since such summaries would be unsafe to use as the basis for an incremental backup. In this case, the fields above will continue to advance as if summaries were being generated, but nothing will be written to disk. Once the summarizer reaches WAL generated while \u003ccode\u003ewal_level\u003c/code\u003e was set to \u003ccode\u003ereplica\u003c/code\u003e or higher, it will resume writing summaries to disk.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e\n\u003c/div\u003e","SourceRevision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","ContentHash":"ad1cabe804e7ff9ca044119f079f0e0f6074ce3497aab0d7bb3bcd0f8f83cc36","Payload":{"description":["user-level transaction ID snapshot (deprecated; see pg_snapshot )"],"manual_html":"\u003cdiv class=\"sect1\" id=\"FUNCTIONS-INFO\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2 class=\"title\"\u003e9.27. System Information Functions and Operators \u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cp\u003eThe functions described in this section are used to obtain various information about a \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e installation.\u003c/p\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-SESSION\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.1. Session Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-SESSION-TABLE\" title=\"Table 9.71. Session Information Functions\"\u003eTable 9.71\u003c/a\u003e shows several functions that extract session and system information.\u003c/p\u003e\n\u003cp\u003eIn addition to the functions listed in this section, there are a number of functions related to the statistics system that also provide system information. See \u003ca class=\"xref\" href=\"/docs/18/monitoring-stats.html#MONITORING-STATS-FUNCTIONS\" title=\"27.2.26. Statistics Functions\"\u003eSection 27.2.26\u003c/a\u003e for more information.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-SESSION-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.71. Session Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_catalog\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_database\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the current database. (Databases are called \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ecatalogs\u003c/span\u003e”\u003c/span\u003e in the SQL standard, so \u003ccode class=\"function\"\u003ecurrent_catalog\u003c/code\u003e is the standard's spelling.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_query\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the text of the currently executing query, as submitted by the client (which might contain more than one statement).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is equivalent to \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e  \u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the schema that is first in the search path (or a null value if the search path is empty). This is the schema that will be used for any tables or other named objects that are created without specifying a target schema.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e  \u003ccode class=\"function\"\u003ecurrent_schemas\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003einclude_implicit\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ename[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the names of all schemas presently in the effective search path, in their priority order. (Items in the current \u003ca class=\"xref\" href=\"/docs/18/runtime-config-client.html#GUC-SEARCH-PATH\"\u003esearch_path\u003c/a\u003e setting that do not correspond to existing, searchable schemas are omitted.) If the Boolean argument is \u003ccode class=\"literal\"\u003etrue\u003c/code\u003e, then implicitly-searched system schemas such as \u003ccode class=\"literal\"\u003epg_catalog\u003c/code\u003e are included in the result.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e  \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the user name of the current execution context.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_client_addr\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einet\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP address of the current client, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_client_port\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP port number of the current client, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_server_addr\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einet\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP address on which the server accepted the current connection, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003einet_server_port\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the IP port number on which the server accepted the current connection, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the current connection is via a Unix-domain socket.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_backend_pid\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the process ID of the server process attached to the current session.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_blocking_pids\u003c/code\u003e ( \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the process ID(s) of the sessions that are blocking the server process with the specified process ID from acquiring a lock, or an empty array if there is no such server process or it is not blocked.\u003c/p\u003e\n\u003cp\u003eOne server process blocks another if it either holds a lock that conflicts with the blocked process's lock request (hard block), or is waiting for a lock that would conflict with the blocked process's lock request and is ahead of it in the wait queue (soft block). When using parallel queries the result always lists client-visible process IDs (that is, \u003ccode class=\"function\"\u003epg_backend_pid\u003c/code\u003e results) even if the actual lock is held or awaited by a child worker process. As a result of that, there may be duplicated PIDs in the result. Also note that when a prepared transaction holds a conflicting lock, it will be represented by a zero process ID.\u003c/p\u003e\n\u003cp\u003eFrequent calls to this function could have some impact on database performance, because it needs exclusive access to the lock manager's shared state for a short time.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_conf_load_time\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the time when the server configuration files were last loaded. If the current session was alive at the time, this will be the time when the session itself re-read the configuration files (so the reading will vary a little in different sessions). Otherwise it is the time when the postmaster process re-read the configuration files.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e    \u003ccode class=\"function\"\u003epg_current_logfile\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the path name of the log file currently in use by the logging collector. The path includes the \u003ca class=\"xref\" href=\"/docs/18/runtime-config-logging.html#GUC-LOG-DIRECTORY\"\u003elog_directory\u003c/a\u003e directory and the individual log file name. The result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the logging collector is disabled. When multiple log files exist, each in a different format, \u003ccode class=\"function\"\u003epg_current_logfile\u003c/code\u003e without an argument returns the path of the file having the first format found in the ordered list: \u003ccode class=\"literal\"\u003estderr\u003c/code\u003e, \u003ccode class=\"literal\"\u003ecsvlog\u003c/code\u003e, \u003ccode class=\"literal\"\u003ejsonlog\u003c/code\u003e. \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if no log file has any of these formats. To request information about a specific log file format, supply either \u003ccode class=\"literal\"\u003ecsvlog\u003c/code\u003e, \u003ccode class=\"literal\"\u003ejsonlog\u003c/code\u003e or \u003ccode class=\"literal\"\u003estderr\u003c/code\u003e as the value of the optional parameter. The result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the log format requested is not configured in \u003ca class=\"xref\" href=\"/docs/18/runtime-config-logging.html#GUC-LOG-DESTINATION\"\u003elog_destination\u003c/a\u003e. The result reflects the contents of the \u003ccode class=\"filename\"\u003ecurrent_logfiles\u003c/code\u003e file.\u003c/p\u003e\n\u003cp\u003eThis function is restricted to superusers and roles with privileges of the \u003ccode class=\"literal\"\u003epg_monitor\u003c/code\u003e role by default, but other users can be granted EXECUTE to run the function.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_loaded_modules\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003emodule_name\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eversion\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003efile_name\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a list of the loadable modules that are loaded into the current server session. The \u003cem class=\"parameter\"\u003e\u003ccode\u003emodule_name\u003c/code\u003e\u003c/em\u003e and \u003cem class=\"parameter\"\u003e\u003ccode\u003eversion\u003c/code\u003e\u003c/em\u003e fields are NULL unless the module author supplied values for them using the \u003ccode class=\"literal\"\u003ePG_MODULE_MAGIC_EXT\u003c/code\u003e macro. The \u003cem class=\"parameter\"\u003e\u003ccode\u003efile_name\u003c/code\u003e\u003c/em\u003e field gives the file name of the module (shared library).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_my_temp_schema\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003eoid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the current session's temporary schema, or zero if it has none (because it has not created any temporary tables).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_is_other_temp_schema\u003c/code\u003e ( \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if the given OID is the OID of another session's temporary schema. (This can be useful, for example, to exclude other sessions' temporary tables from a catalog display.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_jit_available\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if a JIT compiler extension is available (see \u003ca class=\"xref\" href=\"/docs/18/jit.html\" title=\"Chapter 30. Just-in-Time Compilation (JIT)\"\u003eChapter 30\u003c/a\u003e) and the \u003ca class=\"xref\" href=\"/docs/18/runtime-config-query.html#GUC-JIT\"\u003ejit\u003c/a\u003e configuration parameter is set to \u003ccode class=\"literal\"\u003eon\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_numa_available\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns true if the server has been compiled with NUMA support.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_listening_channels\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof text\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of names of asynchronous notification channels that the current session is listening to.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_notification_queue_usage\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003edouble precision\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the fraction (0–1) of the asynchronous notification queue's maximum size that is currently occupied by notifications that are waiting to be processed. See \u003ca class=\"xref\" href=\"/docs/18/sql-listen.html\" title=\"LISTEN\"\u003e\u003cspan class=\"refentrytitle\"\u003eLISTEN\u003c/span\u003e\u003c/a\u003e and \u003ca class=\"xref\" href=\"/docs/18/sql-notify.html\" title=\"NOTIFY\"\u003e\u003cspan class=\"refentrytitle\"\u003eNOTIFY\u003c/span\u003e\u003c/a\u003e for more information.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_postmaster_start_time\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the time when the server started.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_safe_snapshot_blocking_pids\u003c/code\u003e ( \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the process ID(s) of the sessions that are blocking the server process with the specified process ID from acquiring a safe snapshot, or an empty array if there is no such server process or it is not blocked.\u003c/p\u003e\n\u003cp\u003eA session running a \u003ccode class=\"literal\"\u003eSERIALIZABLE\u003c/code\u003e transaction blocks a \u003ccode class=\"literal\"\u003eSERIALIZABLE READ ONLY DEFERRABLE\u003c/code\u003e transaction from acquiring a snapshot until the latter determines that it is safe to avoid taking any predicate locks. See \u003ca class=\"xref\" href=\"/docs/18/transaction-iso.html#XACT-SERIALIZABLE\" title=\"13.2.3. Serializable Isolation Level\"\u003eSection 13.2.3\u003c/a\u003e for more information about serializable and deferrable transactions.\u003c/p\u003e\n\u003cp\u003eFrequent calls to this function could have some impact on database performance, because it needs access to the predicate lock manager's shared state for a short time.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_trigger_depth\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current nesting level of \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e triggers (0 if not called, directly or indirectly, from inside a trigger).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003esession_user\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the session user's name.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003esystem_user\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the authentication method and the identity (if any) that the user presented during the authentication cycle before they were assigned a database role. It is represented as \u003ccode class=\"literal\"\u003eauth_method:identity\u003c/code\u003e or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if the user has not been authenticated (for example if \u003ca class=\"link\" href=\"/docs/18/auth-trust.html\" title=\"20.4. Trust Authentication\"\u003eTrust authentication\u003c/a\u003e has been used).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003euser\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eThis is equivalent to \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"note\"\u003e\n\u003ch3 class=\"title\"\u003eNote\u003c/h3\u003e\n\u003cp\u003e\u003ccode class=\"function\"\u003ecurrent_catalog\u003c/code\u003e, \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e, \u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e, \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e, \u003ccode class=\"function\"\u003esession_user\u003c/code\u003e, and \u003ccode class=\"function\"\u003euser\u003c/code\u003e have special syntactic status in SQL: they must be called without trailing parentheses. In PostgreSQL, parentheses can optionally be used with \u003ccode class=\"function\"\u003ecurrent_schema\u003c/code\u003e, but not with the others.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003ccode class=\"function\"\u003esession_user\u003c/code\u003e is normally the user who initiated the current database connection; but superusers can change this setting with \u003ca class=\"xref\" href=\"/docs/18/sql-set-session-authorization.html\" title=\"SET SESSION AUTHORIZATION\"\u003e\u003cspan class=\"refentrytitle\"\u003eSET SESSION AUTHORIZATION\u003c/span\u003e\u003c/a\u003e. The \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e is the user identifier that is applicable for permission checking. Normally it is equal to the session user, but it can be changed with \u003ca class=\"xref\" href=\"/docs/18/sql-set-role.html\" title=\"SET ROLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eSET ROLE\u003c/span\u003e\u003c/a\u003e. It also changes during the execution of functions with the attribute \u003ccode class=\"literal\"\u003eSECURITY DEFINER\u003c/code\u003e. In Unix parlance, the session user is the \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ereal user\u003c/span\u003e”\u003c/span\u003e and the current user is the \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003eeffective user\u003c/span\u003e”\u003c/span\u003e. \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e and \u003ccode class=\"function\"\u003euser\u003c/code\u003e are synonyms for \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e. (The SQL standard draws a distinction between \u003ccode class=\"function\"\u003ecurrent_role\u003c/code\u003e and \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e, but \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e does not, since it unifies users and roles into a single kind of entity.)\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-ACCESS\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.2. Access Privilege Inquiry Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE\" title=\"Table 9.72. Access Privilege Inquiry Functions\"\u003eTable 9.72\u003c/a\u003e lists functions that allow querying object access privileges programmatically. (See \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e for more information about privileges.) In these functions, the user whose privileges are being inquired about can be specified by name or by OID (\u003ccode class=\"structname\"\u003epg_authid\u003c/code\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e), or if the name is given as \u003ccode class=\"literal\"\u003epublic\u003c/code\u003e then the privileges of the PUBLIC pseudo-role are checked. Also, the \u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e argument can be omitted entirely, in which case the \u003ccode class=\"function\"\u003ecurrent_user\u003c/code\u003e is assumed. The object that is being inquired about can be specified either by name or by OID, too. When specifying by name, a schema name can be included if relevant. The access privilege of interest is specified by a text string, which must evaluate to one of the appropriate privilege keywords for the object's type (e.g., \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e). Optionally, \u003ccode class=\"literal\"\u003eWITH GRANT OPTION\u003c/code\u003e can be added to a privilege type to test whether the privilege is held with grant option. Also, multiple privilege types can be listed separated by commas, in which case the result will be true if any of the listed privileges is held. (Case of the privilege string is not significant, and extra whitespace is allowed between but not within privilege names.) Some examples:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003eSELECT has_table_privilege('myschema.mytable', 'select');\nSELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');\n\u003c/pre\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-ACCESS-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.72. Access Privilege Inquiry Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_any_column_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for any column of table? This succeeds either if the privilege is held for the whole table, or if there is a column-level grant of the privilege for at least one column. Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eREFERENCES\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_column_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003esmallint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for the specified table column? This succeeds either if the privilege is held for the whole table, or if there is a column-level grant of the privilege for the column. The column can be specified by name or by attribute number (\u003ccode class=\"structname\"\u003epg_attribute\u003c/code\u003e.\u003ccode class=\"structfield\"\u003eattnum\u003c/code\u003e). Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eREFERENCES\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_database_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003edatabase\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for database? Allowable privilege types are \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eCONNECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eTEMPORARY\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eTEMP\u003c/code\u003e (which is equivalent to \u003ccode class=\"literal\"\u003eTEMPORARY\u003c/code\u003e).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_foreign_data_wrapper_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003efdw\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for foreign-data wrapper? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_function_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003efunction\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for function? The only allowable privilege type is \u003ccode class=\"literal\"\u003eEXECUTE\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eWhen specifying a function by name rather than by OID, the allowed input is the same as for the \u003ccode class=\"type\"\u003eregprocedure\u003c/code\u003e data type (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e). An example is:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003e\nSELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_language_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003elanguage\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for language? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_largeobject_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003elargeobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for large object? Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e and \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_parameter_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003eparameter\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for configuration parameter? The parameter name is case-insensitive. Allowable privilege types are \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e and \u003ccode class=\"literal\"\u003eALTER SYSTEM\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_schema_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for schema? Allowable privilege types are \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e and \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_sequence_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003esequence\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for sequence? Allowable privilege types are \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_server_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003eserver\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for foreign server? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_table_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for table? Allowable privilege types are \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUPDATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eDELETE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eTRUNCATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eREFERENCES\u003c/code\u003e, \u003ccode class=\"literal\"\u003eTRIGGER\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eMAINTAIN\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_tablespace_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for tablespace? The only allowable privilege type is \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ehas_type_privilege\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for data type? The only allowable privilege type is \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e. When specifying a type by name rather than by OID, the allowed input is the same as for the \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e data type (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_has_role\u003c/code\u003e ( [ \u003cspan class=\"optional\"\u003e\u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e,\u003c/span\u003e ] \u003cem class=\"parameter\"\u003e\u003ccode\u003erole\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes user have privilege for role? Allowable privilege types are \u003ccode class=\"literal\"\u003eMEMBER\u003c/code\u003e, \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e. \u003ccode class=\"literal\"\u003eMEMBER\u003c/code\u003e denotes direct or indirect membership in the role without regard to what specific privileges may be conferred. \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e denotes whether the privileges of the role are immediately available without doing \u003ccode class=\"command\"\u003eSET ROLE\u003c/code\u003e, while \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e denotes whether it is possible to change to the role using the \u003ccode class=\"literal\"\u003eSET ROLE\u003c/code\u003e command. \u003ccode class=\"literal\"\u003eWITH ADMIN OPTION\u003c/code\u003e or \u003ccode class=\"literal\"\u003eWITH GRANT OPTION\u003c/code\u003e can be added to any of these privilege types to test whether the \u003ccode class=\"literal\"\u003eADMIN\u003c/code\u003e privilege is held (all six spellings test the same thing). This function does not allow the special case of setting \u003cem class=\"parameter\"\u003e\u003ccode\u003euser\u003c/code\u003e\u003c/em\u003e to \u003ccode class=\"literal\"\u003epublic\u003c/code\u003e, because the PUBLIC pseudo-role can never be a member of real roles.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003erow_security_active\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e or \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs row-level security active for the specified table in the context of the current user and current environment?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-ACLITEM-OP-TABLE\" title=\"Table 9.73. aclitem Operators\"\u003eTable 9.73\u003c/a\u003e shows the operators available for the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e type, which is the catalog representation of access privileges. See \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e for information about how to read access privilege values.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-ACLITEM-OP-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.73. \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e Operators\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eOperator\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003cp\u003eExample(s)\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e \u003ccode class=\"literal\"\u003e=\u003c/code\u003e \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAre \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003es equal? (Notice that type \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e lacks the usual set of comparison operators; it has only equality. In turn, \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e arrays can only be compared for equality.)\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003e'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"type\"\u003eaclitem[]\u003c/code\u003e \u003ccode class=\"literal\"\u003e@\u0026gt;\u003c/code\u003e \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDoes array contain the specified privileges? (This is true if there is an array entry that matches the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e's grantee and grantor, and has at least the specified set of privileges.)\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003e'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @\u0026gt; 'calvin=r*/hobbes'::aclitem\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003et\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-ACLITEM-FN-TABLE\" title=\"Table 9.74. aclitem Functions\"\u003eTable 9.74\u003c/a\u003e shows some additional functions to manage the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e type.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-ACLITEM-FN-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.74. \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eacldefault\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003e\"char\"\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eownerId\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConstructs an \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e array holding the default access privileges for an object of type \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e belonging to the role with OID \u003cem class=\"parameter\"\u003e\u003ccode\u003eownerId\u003c/code\u003e\u003c/em\u003e. This represents the access privileges that will be assumed when an object's ACL entry is null. (The default access privileges are described in \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e.) The \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e parameter must be one of 'c' for \u003ccode class=\"literal\"\u003eCOLUMN\u003c/code\u003e, 'r' for \u003ccode class=\"literal\"\u003eTABLE\u003c/code\u003e and table-like objects, 's' for \u003ccode class=\"literal\"\u003eSEQUENCE\u003c/code\u003e, 'd' for \u003ccode class=\"literal\"\u003eDATABASE\u003c/code\u003e, 'f' for \u003ccode class=\"literal\"\u003eFUNCTION\u003c/code\u003e or \u003ccode class=\"literal\"\u003ePROCEDURE\u003c/code\u003e, 'l' for \u003ccode class=\"literal\"\u003eLANGUAGE\u003c/code\u003e, 'L' for \u003ccode class=\"literal\"\u003eLARGE OBJECT\u003c/code\u003e, 'n' for \u003ccode class=\"literal\"\u003eSCHEMA\u003c/code\u003e, 'p' for \u003ccode class=\"literal\"\u003ePARAMETER\u003c/code\u003e, 't' for \u003ccode class=\"literal\"\u003eTABLESPACE\u003c/code\u003e, 'F' for \u003ccode class=\"literal\"\u003eFOREIGN DATA WRAPPER\u003c/code\u003e, 'S' for \u003ccode class=\"literal\"\u003eFOREIGN SERVER\u003c/code\u003e, or 'T' for \u003ccode class=\"literal\"\u003eTYPE\u003c/code\u003e or \u003ccode class=\"literal\"\u003eDOMAIN\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eaclexplode\u003c/code\u003e ( \u003ccode class=\"type\"\u003eaclitem[]\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantor\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege_type\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_grantable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e array as a set of rows. If the grantee is the pseudo-role PUBLIC, it is represented by zero in the \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e column. Each granted privilege is represented as \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, etc (see \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html#PRIVILEGE-ABBREVS-TABLE\" title=\"Table 5.1. ACL Privilege Abbreviations\"\u003eTable 5.1\u003c/a\u003e for a full list). Note that each privilege is broken out as a separate row, so only one keyword appears in the \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivilege_type\u003c/code\u003e\u003c/em\u003e column.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003emakeaclitem\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantee\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003egrantor\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivileges\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_grantable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eaclitem\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConstructs an \u003ccode class=\"type\"\u003eaclitem\u003c/code\u003e with the given properties. \u003cem class=\"parameter\"\u003e\u003ccode\u003eprivileges\u003c/code\u003e\u003c/em\u003e is a comma-separated list of privilege names such as \u003ccode class=\"literal\"\u003eSELECT\u003c/code\u003e, \u003ccode class=\"literal\"\u003eINSERT\u003c/code\u003e, etc, all of which are set in the result. (Case of the privilege string is not significant, and extra whitespace is allowed between but not within privilege names.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-SCHEMA\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.3. Schema Visibility Inquiry Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-SCHEMA-TABLE\" title=\"Table 9.75. Schema Visibility Inquiry Functions\"\u003eTable 9.75\u003c/a\u003e shows functions that determine whether a certain object is \u003cem class=\"firstterm\"\u003evisible\u003c/em\u003e in the current schema search path. For example, a table is said to be visible if its containing schema is in the search path and no table of the same name appears earlier in the search path. This is equivalent to the statement that the table can be referenced by name without explicit schema qualification. Thus, to list the names of all visible tables:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003eSELECT relname FROM pg_class WHERE pg_table_is_visible(oid);\n\u003c/pre\u003e\n\u003cp\u003eFor functions and operators, an object in the search path is said to be visible if there is no object of the same name \u003cspan class=\"emphasis\"\u003e\u003cem\u003eand argument data type(s)\u003c/em\u003e\u003c/span\u003e earlier in the path. For operator classes and families, both the name and the associated index access method are considered.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-SCHEMA-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.75. Schema Visibility Inquiry Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_collation_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs collation visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_conversion_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003econversion\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs conversion visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_function_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunction\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs function visible in search path? (This also works for procedures and aggregates.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_opclass_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eopclass\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator class visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_operator_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eoperator\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_opfamily_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eopclass\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs operator family visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_statistics_obj_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estat\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs statistics object visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_table_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs table visible in search path? (This works for all types of relations, including views, materialized views, indexes, sequences and foreign tables.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_config_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003econfig\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search configuration visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_dict_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search dictionary visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_parser_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eparser\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search parser visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_ts_template_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etemplate\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs text search template visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_type_is_visible\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs type (or domain) visible in search path?\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eAll these functions require object OIDs to identify the object to be checked. If you want to test an object by name, it is convenient to use the OID alias types (\u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e, \u003ccode class=\"type\"\u003eregprocedure\u003c/code\u003e, \u003ccode class=\"type\"\u003eregoperator\u003c/code\u003e, \u003ccode class=\"type\"\u003eregconfig\u003c/code\u003e, or \u003ccode class=\"type\"\u003eregdictionary\u003c/code\u003e), for example:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003eSELECT pg_type_is_visible('myschema.widget'::regtype);\n\u003c/pre\u003e\n\u003cp\u003eNote that it would not make much sense to test a non-schema-qualified type name in this way — if the name can be recognized at all, it must be visible.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-CATALOG\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.4. System Catalog Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE\" title=\"Table 9.76. System Catalog Information Functions\"\u003eTable 9.76\u003c/a\u003e lists functions that extract information from the system catalogs.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-CATALOG-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.76. System Catalog Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"FORMAT-TYPE\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eformat_type\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etypemod\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the SQL name for a data type that is identified by its type OID and possibly a type modifier. Pass NULL for the type modifier if no specific modifier is known.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_basetype\u003c/code\u003e ( \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the base type of a domain identified by its type OID. If the argument is the OID of a non-domain type, returns the argument as-is. Returns NULL if the argument is not a valid type OID. If there's a chain of domain dependencies, it will recurse until finding the base type.\u003c/p\u003e\n\u003cp\u003eAssuming \u003ccode class=\"literal\"\u003eCREATE DOMAIN mytext AS text\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_basetype('mytext'::regtype)\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"PG-CHAR-TO-ENCODING\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_char_to_encoding\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConverts the supplied encoding name into an integer representing the internal identifier used in some system catalog tables. Returns \u003ccode class=\"literal\"\u003e-1\u003c/code\u003e if an unknown encoding name is provided.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"PG-ENCODING-TO-CHAR\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_encoding_to_char\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eencoding\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eConverts the integer used as the internal identifier of an encoding in some system catalog tables into a human-readable string. Returns an empty string if an invalid encoding number is provided.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_catalog_foreign_keys\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efktable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003efkcols\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epktable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epkcols\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_array\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_opt\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a set of records describing the foreign key relationships that exist within the \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e system catalogs. The \u003cem class=\"parameter\"\u003e\u003ccode\u003efktable\u003c/code\u003e\u003c/em\u003e column contains the name of the referencing catalog, and the \u003cem class=\"parameter\"\u003e\u003ccode\u003efkcols\u003c/code\u003e\u003c/em\u003e column contains the name(s) of the referencing column(s). Similarly, the \u003cem class=\"parameter\"\u003e\u003ccode\u003epktable\u003c/code\u003e\u003c/em\u003e column contains the name of the referenced catalog, and the \u003cem class=\"parameter\"\u003e\u003ccode\u003epkcols\u003c/code\u003e\u003c/em\u003e column contains the name(s) of the referenced column(s). If \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_array\u003c/code\u003e\u003c/em\u003e is true, the last referencing column is an array, each of whose elements should match some entry in the referenced catalog. If \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_opt\u003c/code\u003e\u003c/em\u003e is true, the referencing column(s) are allowed to contain zeroes instead of a valid reference.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_constraintdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003econstraint\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a constraint. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_expr\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eexpr\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_node_tree\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003erelation\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDecompiles the internal form of an expression stored in the system catalogs, such as the default value for a column. If the expression might contain Vars, specify the OID of the relation they refer to as the second parameter; if no Vars are expected, passing zero is sufficient.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_functiondef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a function or procedure. (This is a decompiled reconstruction, not the original text of the command.) The result is a complete \u003ccode class=\"command\"\u003eCREATE OR REPLACE FUNCTION\u003c/code\u003e or \u003ccode class=\"command\"\u003eCREATE OR REPLACE PROCEDURE\u003c/code\u003e statement.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_function_arguments\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the argument list of a function or procedure, in the form it would need to appear in within \u003ccode class=\"command\"\u003eCREATE FUNCTION\u003c/code\u003e (including default values).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_function_identity_arguments\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the argument list necessary to identify a function or procedure, in the form it would need to appear in within commands such as \u003ccode class=\"command\"\u003eALTER FUNCTION\u003c/code\u003e. This form omits default values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_function_result\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003efunc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the \u003ccode class=\"literal\"\u003eRETURNS\u003c/code\u003e clause of a function, in the form it would need to appear in within \u003ccode class=\"command\"\u003eCREATE FUNCTION\u003c/code\u003e. Returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e for a procedure.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_indexdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for an index. (This is a decompiled reconstruction, not the original text of the command.) If \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e is supplied and is not zero, only the definition of that column is reconstructed.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_keywords\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eword\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatcode\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003e\"char\"\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ebarelabel\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatdesc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ebaredesc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a set of records describing the SQL keywords recognized by the server. The \u003cem class=\"parameter\"\u003e\u003ccode\u003eword\u003c/code\u003e\u003c/em\u003e column contains the keyword. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatcode\u003c/code\u003e\u003c/em\u003e column contains a category code: \u003ccode class=\"literal\"\u003eU\u003c/code\u003e for an unreserved keyword, \u003ccode class=\"literal\"\u003eC\u003c/code\u003e for a keyword that can be a column name, \u003ccode class=\"literal\"\u003eT\u003c/code\u003e for a keyword that can be a type or function name, or \u003ccode class=\"literal\"\u003eR\u003c/code\u003e for a fully reserved keyword. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ebarelabel\u003c/code\u003e\u003c/em\u003e column contains \u003ccode class=\"literal\"\u003etrue\u003c/code\u003e if the keyword can be used as a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ebare\u003c/span\u003e”\u003c/span\u003e column label in \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e lists, or \u003ccode class=\"literal\"\u003efalse\u003c/code\u003e if it can only be used after \u003ccode class=\"literal\"\u003eAS\u003c/code\u003e. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatdesc\u003c/code\u003e\u003c/em\u003e column contains a possibly-localized string describing the keyword's category. The \u003cem class=\"parameter\"\u003e\u003ccode\u003ebaredesc\u003c/code\u003e\u003c/em\u003e column contains a possibly-localized string describing the keyword's column label status.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_partition_constraintdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the definition of a partition constraint. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_partkeydef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the definition of a partitioned table's partition key, in the form it would have in the \u003ccode class=\"literal\"\u003ePARTITION BY\u003c/code\u003e clause of \u003ccode class=\"command\"\u003eCREATE TABLE\u003c/code\u003e. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_ruledef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003erule\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a rule. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_serial_sequence\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the sequence associated with a column, or NULL if no sequence is associated with the column. If the column is an identity column, the associated sequence is the sequence internally created for that column. For columns created using one of the serial types (\u003ccode class=\"type\"\u003eserial\u003c/code\u003e, \u003ccode class=\"type\"\u003esmallserial\u003c/code\u003e, \u003ccode class=\"type\"\u003ebigserial\u003c/code\u003e), it is the sequence created for that serial column definition. In the latter case, the association can be modified or removed with \u003ccode class=\"command\"\u003eALTER SEQUENCE OWNED BY\u003c/code\u003e. (This function probably should have been called \u003ccode class=\"function\"\u003epg_get_owned_sequence\u003c/code\u003e; its current name reflects the fact that it has historically been used with serial-type columns.) The first parameter is a table name with optional schema, and the second parameter is a column name. Because the first parameter potentially contains both schema and table names, it is parsed per usual SQL rules, meaning it is lower-cased by default. The second parameter, being just a column name, is treated literally and so has its case preserved. The result is suitably formatted for passing to the sequence functions (see \u003ca class=\"xref\" href=\"/docs/18/functions-sequence.html\" title=\"9.17. Sequence Manipulation Functions\"\u003eSection 9.17\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eA typical use is in reading the current value of the sequence for an identity or serial column, for example:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003e\nSELECT currval(pg_get_serial_sequence('sometable', 'id'));\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_statisticsobjdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estatobj\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for an extended statistics object. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_triggerdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etrigger\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the creating command for a trigger. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_userbyid\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003erole\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a role's name given its OID.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_viewdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e command for a view or materialized view. (This is a decompiled reconstruction, not the original text of the command.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003epg_get_viewdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ewrap_column\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e command for a view or materialized view. (This is a decompiled reconstruction, not the original text of the command.) In this form of the function, pretty-printing is always enabled, and long lines are wrapped to try to keep them shorter than the specified number of columns.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003epg_get_viewdef\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eview\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e [\u003cspan class=\"optional\"\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/span\u003e ] ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReconstructs the underlying \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e command for a view or materialized view, working from a textual name for the view rather than its OID. (This is deprecated; use the OID variant instead.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_index_column_has_property\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index column has the named property. Common index column properties are listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEX-COLUMN-PROPS\" title=\"Table 9.77. Index Column Properties\"\u003eTable 9.77\u003c/a\u003e. (Note that extension access methods can define additional property names for their indexes.) \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID or column number does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_index_has_property\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eindex\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index has the named property. Common index properties are listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEX-PROPS\" title=\"Table 9.78. Index Properties\"\u003eTable 9.78\u003c/a\u003e. (Note that extension access methods can define additional property names for their indexes.) \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_indexam_has_property\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eam\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether an index access method has the named property. Access method properties are listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-INDEXAM-PROPS\" title=\"Table 9.79. Index Access Method Properties\"\u003eTable 9.79\u003c/a\u003e. \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned if the property name is not known or does not apply to the particular object, or if the OID does not identify a valid object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_options_to_table\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eoptions_array\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eoption_name\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eoption_value\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the set of storage options represented by a value from \u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e.\u003ccode class=\"structfield\"\u003ereloptions\u003c/code\u003e or \u003ccode class=\"structname\"\u003epg_attribute\u003c/code\u003e.\u003ccode class=\"structfield\"\u003eattoptions\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_settings_get_flags\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eguc\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns an array of the flags associated with the given GUC, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if it does not exist. The result is an empty array if the GUC exists but there are no flags to show. Only the most useful flags listed in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SETTINGS-FLAGS\" title=\"Table 9.80. GUC Flags\"\u003eTable 9.80\u003c/a\u003e are exposed.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_tablespace_databases\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof oid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of OIDs of databases that have objects stored in the specified tablespace. If this function returns any rows, the tablespace is not empty and cannot be dropped. To identify the specific objects populating the tablespace, you will need to connect to the database(s) identified by \u003ccode class=\"function\"\u003epg_tablespace_databases\u003c/code\u003e and query their \u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e catalogs.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_tablespace_location\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the file system path that this tablespace is located in.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_typeof\u003c/code\u003e ( \u003ccode class=\"type\"\u003e\"any\"\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the OID of the data type of the value that is passed to it. This can be helpful for troubleshooting or dynamically constructing SQL queries. The function is declared as returning \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e, which is an OID alias type (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); this means that it is the same as an OID for comparison purposes but displays as a type name.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_typeof(33)\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eCOLLATION FOR\u003c/code\u003e ( \u003ccode class=\"type\"\u003e\"any\"\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the name of the collation of the value that is passed to it. The value is quoted and schema-qualified if necessary. If no collation was derived for the argument expression, then \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e is returned. If the argument is not of a collatable data type, then an error is raised.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ecollation for ('foo'::text)\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003e\"default\"\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ecollation for ('foo' COLLATE \"de_DE\")\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003e\"de_DE\"\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regclass\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregclass\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual relation name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregclass\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regcollation\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregcollation\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual collation name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregcollation\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regnamespace\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregnamespace\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual schema name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregnamespace\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regoper\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregoper\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual operator name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregoper\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found or is ambiguous.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regoperator\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregoperator\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual operator name (with parameter types) to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregoperator\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regproc\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregproc\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual function or procedure name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found or is ambiguous.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regprocedure\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregprocedure\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual function or procedure name (with argument types) to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregprocedure\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regrole\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregrole\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTranslates a textual role name to its OID. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregrole\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e); however, this function will return \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e rather than throwing an error if the name is not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\" id=\"TO-REGTYPE\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regtype\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eregtype\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a string of text, extracts a potential type name from it, and translates that name into a type OID. A syntax error in the string will result in an error; but if the string is a syntactically valid type name that happens not to be found in the catalogs, the result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e. A similar result is obtained by casting the string to type \u003ccode class=\"type\"\u003eregtype\u003c/code\u003e (see \u003ca class=\"xref\" href=\"/docs/18/datatype-oid.html\" title=\"8.19. Object Identifier Types\"\u003eSection 8.19\u003c/a\u003e), except that that will throw error for name not found.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eto_regtypemod\u003c/code\u003e ( \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eParses a string of text, extracts a potential type name from it, and translates its type modifier, if any. A syntax error in the string will result in an error; but if the string is a syntactically valid type name that happens not to be found in the catalogs, the result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e. The result is \u003ccode class=\"literal\"\u003e-1\u003c/code\u003e if no type modifier is present.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"function\"\u003eto_regtypemod\u003c/code\u003e can be combined with \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#TO-REGTYPE\"\u003eto_regtype\u003c/a\u003e to produce appropriate inputs for \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FORMAT-TYPE\"\u003eformat_type\u003c/a\u003e, allowing a string representing a type name to be canonicalized.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003eformat_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)'))\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003echaracter varying(32)\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eMost of the functions that reconstruct (decompile) database objects have an optional \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e flag, which if \u003ccode class=\"literal\"\u003etrue\u003c/code\u003e causes the result to be \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003epretty-printed\u003c/span\u003e”\u003c/span\u003e. Pretty-printing suppresses unnecessary parentheses and adds whitespace for legibility. The pretty-printed format is more readable, but the default format is more likely to be interpreted the same way by future versions of \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e; so avoid using pretty-printed output for dump purposes. Passing \u003ccode class=\"literal\"\u003efalse\u003c/code\u003e for the \u003cem class=\"parameter\"\u003e\u003ccode\u003epretty\u003c/code\u003e\u003c/em\u003e parameter yields the same result as omitting the parameter.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-INDEX-COLUMN-PROPS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.77. Index Column Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003easc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort in ascending order on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003edesc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort in descending order on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003enulls_first\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort with nulls first on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003enulls_last\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column sort with nulls last on a forward scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eorderable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column possess any defined sort ordering?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003edistance_orderable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the column be scanned in order by a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003edistance\u003c/span\u003e”\u003c/span\u003e operator, for example \u003ccode class=\"literal\"\u003eORDER BY col \u0026lt;-\u0026gt; constant\u003c/code\u003e ?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ereturnable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the column value be returned by an index-only scan?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003esearch_array\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column natively support \u003ccode class=\"literal\"\u003ecol = ANY(array)\u003c/code\u003e searches?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003esearch_nulls\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the column support \u003ccode class=\"literal\"\u003eIS NULL\u003c/code\u003e and \u003ccode class=\"literal\"\u003eIS NOT NULL\u003c/code\u003e searches?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-INDEX-PROPS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.78. Index Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eclusterable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the index be used in a \u003ccode class=\"literal\"\u003eCLUSTER\u003c/code\u003e command?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eindex_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the index support plain (non-bitmap) scans?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ebitmap_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the index support bitmap scans?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ebackward_scan\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eCan the scan direction be changed in mid-scan (to support \u003ccode class=\"literal\"\u003eFETCH BACKWARD\u003c/code\u003e on a cursor without needing materialization)?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-INDEXAM-PROPS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.79. Index Access Method Properties\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_order\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support \u003ccode class=\"literal\"\u003eASC\u003c/code\u003e, \u003ccode class=\"literal\"\u003eDESC\u003c/code\u003e and related keywords in \u003ccode class=\"literal\"\u003eCREATE INDEX\u003c/code\u003e?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_unique\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support unique indexes?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_multi_col\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support indexes with multiple columns?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_exclude\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support exclusion constraints?\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003ecan_include\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDoes the access method support the \u003ccode class=\"literal\"\u003eINCLUDE\u003c/code\u003e clause of \u003ccode class=\"literal\"\u003eCREATE INDEX\u003c/code\u003e?\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-SETTINGS-FLAGS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.80. GUC Flags\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFlag\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eEXPLAIN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are included in \u003ccode class=\"command\"\u003eEXPLAIN (SETTINGS)\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNO_SHOW_ALL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are excluded from \u003ccode class=\"command\"\u003eSHOW ALL\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNO_RESET\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag do not support \u003ccode class=\"command\"\u003eRESET\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNO_RESET_ALL\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are excluded from \u003ccode class=\"command\"\u003eRESET ALL\u003c/code\u003e commands.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eNOT_IN_SAMPLE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are not included in \u003ccode class=\"filename\"\u003epostgresql.conf\u003c/code\u003e by default.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eRUNTIME_COMPUTED\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters with this flag are runtime-computed ones.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-OBJECT\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.5. Object Information and Addressing Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-OBJECT-TABLE\" title=\"Table 9.81. Object Information and Addressing Functions\"\u003eTable 9.81\u003c/a\u003e lists functions related to database object identification and addressing.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-OBJECT-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.81. Object Information and Addressing Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_acl\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the ACL for a database object, specified by catalog OID, object OID and sub-object ID. This function returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values for undefined objects.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_describe_object\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a textual description of a database object identified by catalog OID, object OID, and sub-object ID (such as a column number within a table; the sub-object ID is zero when referring to a whole object). This description is intended to be human-readable, and might be translated, depending on server configuration. This is especially useful to determine the identity of an object referenced in the \u003ccode class=\"structname\"\u003epg_depend\u003c/code\u003e catalog. This function returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values for undefined objects.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_identify_object\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eidentity\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by catalog OID, object OID and sub-object ID. This information is intended to be machine-readable, and is never translated. \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e identifies the type of database object; \u003cem class=\"parameter\"\u003e\u003ccode\u003eschema\u003c/code\u003e\u003c/em\u003e is the schema name that the object belongs in, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e for object types that do not belong to schemas; \u003cem class=\"parameter\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e is the name of the object, quoted if necessary, if the name (along with schema name, if pertinent) is sufficient to uniquely identify the object, otherwise \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e; \u003cem class=\"parameter\"\u003e\u003ccode\u003eidentity\u003c/code\u003e\u003c/em\u003e is the complete object identity, with the precise format depending on object type, and each name within the format being schema-qualified and quoted as necessary. Undefined objects are identified with \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_identify_object_as_address\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by catalog OID, object OID and sub-object ID. The returned information is independent of the current server, that is, it could be used to identify an identically named object in another server. \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e identifies the type of database object; \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e and \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e are text arrays that together form a reference to the object. These three values can be passed to \u003ccode class=\"function\"\u003epg_get_object_address\u003c/code\u003e to obtain the internal address of the object.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_object_address\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_names\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject_args\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext[]\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns a row containing enough information to uniquely identify the database object specified by a type code and object name and argument arrays. The returned values are the ones that would be used in system catalogs such as \u003ccode class=\"structname\"\u003epg_depend\u003c/code\u003e; they can be passed to other system functions such as \u003ccode class=\"function\"\u003epg_describe_object\u003c/code\u003e or \u003ccode class=\"function\"\u003epg_identify_object\u003c/code\u003e. \u003cem class=\"parameter\"\u003e\u003ccode\u003eclassid\u003c/code\u003e\u003c/em\u003e is the OID of the system catalog containing the object; \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjid\u003c/code\u003e\u003c/em\u003e is the OID of the object itself, and \u003cem class=\"parameter\"\u003e\u003ccode\u003eobjsubid\u003c/code\u003e\u003c/em\u003e is the sub-object ID, or zero if none. This function is the inverse of \u003ccode class=\"function\"\u003epg_identify_object_as_address\u003c/code\u003e. Undefined objects are identified with \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e values.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003e\u003ccode class=\"function\"\u003epg_get_acl\u003c/code\u003e is useful for retrieving and inspecting the privileges associated with database objects without looking at specific catalogs. For example, to retrieve all the granted privileges on objects in the current database:\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003epostgres=# SELECT\n    (pg_identify_object(s.classid,s.objid,s.objsubid)).*,\n    pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl\nFROM pg_catalog.pg_shdepend AS s\nJOIN pg_catalog.pg_database AS d\n    ON d.datname = current_database() AND\n       d.oid = s.dbid\nJOIN pg_catalog.pg_authid AS a\n    ON a.oid = s.refobjid AND\n       s.refclassid = 'pg_authid'::regclass\nWHERE s.deptype = 'a';\n-[ RECORD 1 ]-----------------------------------------\ntype     | table\nschema   | public\nname     | testtab\nidentity | public.testtab\nacl      | {postgres=arwdDxtm/postgres,foo=r/postgres}\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-COMMENT\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.6. Comment Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\" title=\"Table 9.82. Comment Information Functions\"\u003eTable 9.82\u003c/a\u003e extract comments previously stored with the \u003ca class=\"xref\" href=\"/docs/18/sql-comment.html\" title=\"COMMENT\"\u003e\u003cspan class=\"refentrytitle\"\u003eCOMMENT\u003c/span\u003e\u003c/a\u003e command. A null value is returned if no comment could be found for the specified parameters.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-COMMENT-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.82. Comment Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003ecol_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etable\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecolumn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003einteger\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a table column, which is specified by the OID of its table and its column number. (\u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e cannot be used for table columns, since columns do not have OIDs of their own.)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatalog\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a database object specified by its OID and the name of the containing system catalog. For example, \u003ccode class=\"literal\"\u003eobj_description(123456, 'pg_class')\u003c/code\u003e would retrieve the comment for the table with OID 123456.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e\u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a database object specified by its OID alone. This is \u003cspan class=\"emphasis\"\u003e\u003cem\u003edeprecated\u003c/em\u003e\u003c/span\u003e since there is no guarantee that OIDs are unique across different system catalogs; therefore, the wrong comment might be returned.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eshobj_description\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003eobject\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ecatalog\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the comment for a shared database object specified by its OID and the name of the containing system catalog. This is just like \u003ccode class=\"function\"\u003eobj_description\u003c/code\u003e except that it is used for retrieving comments on shared objects (that is, databases, roles, and tablespaces). Some system catalogs are global to all databases within each cluster, and the descriptions for objects in them are stored globally as well.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-VALIDITY\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.7. Data Validity Checking Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-INFO-VALIDITY-TABLE\" title=\"Table 9.83. Data Validity Checking Functions\"\u003eTable 9.83\u003c/a\u003e can be helpful for checking validity of proposed input data.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-INFO-VALIDITY-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.83. Data Validity Checking Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003cp\u003eExample(s)\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_input_is_valid\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTests whether the given \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e is valid input for the specified data type, returning true or false.\u003c/p\u003e\n\u003cp\u003eThis function will only work as desired if the data type's input function has been updated to report invalid input as a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003esoft\u003c/span\u003e”\u003c/span\u003e error. Otherwise, invalid input will abort the transaction, just as if the string had been cast to the type directly.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_input_is_valid('42', 'integer')\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003et\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_input_is_valid('42000000000', 'integer')\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003epg_input_is_valid('1234.567', 'numeric(7,4)')\u003c/code\u003e → \u003ccode class=\"returnvalue\"\u003ef\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_input_error_info\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etype\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003emessage\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003edetail\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ehint\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003esql_error_code\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eTests whether the given \u003cem class=\"parameter\"\u003e\u003ccode\u003estring\u003c/code\u003e\u003c/em\u003e is valid input for the specified data type; if not, return the details of the error that would have been thrown. If the input is valid, the results are NULL. The inputs are the same as for \u003ccode class=\"function\"\u003epg_input_is_valid\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThis function will only work as desired if the data type's input function has been updated to report invalid input as a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003esoft\u003c/span\u003e”\u003c/span\u003e error. Otherwise, invalid input will abort the transaction, just as if the string had been cast to the type directly.\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003eSELECT * FROM pg_input_error_info('42000000000', 'integer')\u003c/code\u003e →\u003c/p\u003e\n\u003cpre class=\"programlisting\"\u003e\n                       message                        | detail | hint | sql_error_code\n------------------------------------------------------+--------+------+----------------\n value \"42000000000\" is out of range for type integer |        |      | 22003\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-SNAPSHOT\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.8. Transaction ID and Snapshot Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT\" title=\"Table 9.84. Transaction ID and Snapshot Information Functions\"\u003eTable 9.84\u003c/a\u003e provide server transaction information in an exportable form. The main use of these functions is to determine which transactions were committed between two snapshots.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-SNAPSHOT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.84. Transaction ID and Snapshot Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eage\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the number of transactions between the supplied transaction id and the current transaction counter.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003emxid_age\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003einteger\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the number of multixacts IDs between the supplied multixact ID and the current multixacts counter.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_current_xact_id\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current transaction's ID. It will assign a new one if the current transaction does not have one already (because it has not performed any database updates); see \u003ca class=\"xref\" href=\"/docs/18/transaction-id.html\" title=\"67.1. Transactions and Identifiers\"\u003eSection 67.1\u003c/a\u003e for details. If executed in a subtransaction, this will return the top-level transaction ID; see \u003ca class=\"xref\" href=\"/docs/18/subxacts.html\" title=\"67.3. Subtransactions\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_current_xact_id_if_assigned\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the current transaction's ID, or \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e if no ID is assigned yet. (It's best to use this variant if the transaction might otherwise be read-only, to avoid unnecessary consumption of an XID.) If executed in a subtransaction, this will return the top-level transaction ID.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_xact_status\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid8\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReports the commit status of a recent transaction. The result is one of \u003ccode class=\"literal\"\u003ein progress\u003c/code\u003e, \u003ccode class=\"literal\"\u003ecommitted\u003c/code\u003e, or \u003ccode class=\"literal\"\u003eaborted\u003c/code\u003e, provided that the transaction is recent enough that the system retains the commit status of that transaction. If it is old enough that no references to the transaction survive in the system and the commit status information has been discarded, the result is \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e. Applications might use this function, for example, to determine whether their transaction committed or aborted after the application and database server become disconnected while a \u003ccode class=\"literal\"\u003eCOMMIT\u003c/code\u003e is in progress. Note that prepared transactions are reported as \u003ccode class=\"literal\"\u003ein progress\u003c/code\u003e; applications must check \u003ca class=\"link\" href=\"/docs/18/view-pg-prepared-xacts.html\" title=\"53.17. pg_prepared_xacts\"\u003e\u003ccode class=\"structname\"\u003epg_prepared_xacts\u003c/code\u003e\u003c/a\u003e if they need to determine whether a transaction ID belongs to a prepared transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_current_snapshot\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003epg_snapshot\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a current \u003cem class=\"firstterm\"\u003esnapshot\u003c/em\u003e, a data structure showing which transaction IDs are now in-progress. Only top-level transaction IDs are included in the snapshot; subtransaction IDs are not shown; see \u003ca class=\"xref\" href=\"/docs/18/subxacts.html\" title=\"67.3. Subtransactions\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_snapshot_xip\u003c/code\u003e ( \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof xid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the set of in-progress transaction IDs contained in a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_snapshot_xmax\u003c/code\u003e ( \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode class=\"structfield\"\u003exmax\u003c/code\u003e of a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_snapshot_xmin\u003c/code\u003e ( \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003exid8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the \u003ccode class=\"structfield\"\u003exmin\u003c/code\u003e of a snapshot.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_visible_in_snapshot\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid8\u003c/code\u003e, \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIs the given transaction ID \u003cem class=\"firstterm\"\u003evisible\u003c/em\u003e according to this snapshot (that is, was it completed before the snapshot was taken)? Note that this function will not give the correct answer for a subtransaction ID (subxid); see \u003ca class=\"xref\" href=\"/docs/18/subxacts.html\" title=\"67.3. Subtransactions\"\u003eSection 67.3\u003c/a\u003e for details.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_multixact_members\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003emultixid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003exid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003emode\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the transaction ID and lock mode for each member of the specified multixact ID. The lock modes \u003ccode class=\"literal\"\u003eforupd\u003c/code\u003e, \u003ccode class=\"literal\"\u003efornokeyupd\u003c/code\u003e, \u003ccode class=\"literal\"\u003esh\u003c/code\u003e, and \u003ccode class=\"literal\"\u003ekeysh\u003c/code\u003e correspond to the row-level locks \u003ccode class=\"literal\"\u003eFOR UPDATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eFOR NO KEY UPDATE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eFOR SHARE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eFOR KEY SHARE\u003c/code\u003e, respectively, as described in \u003ca class=\"xref\" href=\"/docs/18/explicit-locking.html#LOCKING-ROWS\" title=\"13.3.2. Row-Level Locks\"\u003eSection 13.3.2\u003c/a\u003e. Two additional modes are specific to multixacts: \u003ccode class=\"literal\"\u003enokeyupd\u003c/code\u003e, used by updates that do not modify key columns, and \u003ccode class=\"literal\"\u003eupd\u003c/code\u003e, used by updates or deletes that modify key columns.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eThe internal transaction ID type \u003ccode class=\"type\"\u003exid\u003c/code\u003e is 32 bits wide and wraps around every 4 billion transactions. However, the functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT\" title=\"Table 9.84. Transaction ID and Snapshot Information Functions\"\u003eTable 9.84\u003c/a\u003e, except \u003ccode class=\"function\"\u003eage\u003c/code\u003e, \u003ccode class=\"function\"\u003emxid_age\u003c/code\u003e, and \u003ccode class=\"function\"\u003epg_get_multixact_members\u003c/code\u003e, use a 64-bit type \u003ccode class=\"type\"\u003exid8\u003c/code\u003e that does not wrap around during the life of an installation and can be converted to \u003ccode class=\"type\"\u003exid\u003c/code\u003e by casting if required; see \u003ca class=\"xref\" href=\"/docs/18/transaction-id.html\" title=\"67.1. Transactions and Identifiers\"\u003eSection 67.1\u003c/a\u003e for details. The data type \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e stores information about transaction ID visibility at a particular moment in time. Its components are described in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-SNAPSHOT-PARTS\" title=\"Table 9.85. Snapshot Components\"\u003eTable 9.85\u003c/a\u003e. \u003ccode class=\"type\"\u003epg_snapshot\u003c/code\u003e's textual representation is \u003ccode class=\"literal\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003exmin\u003c/code\u003e\u003c/em\u003e:\u003cem class=\"replaceable\"\u003e\u003ccode\u003exmax\u003c/code\u003e\u003c/em\u003e:\u003cem class=\"replaceable\"\u003e\u003ccode\u003exip_list\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e. For example \u003ccode class=\"literal\"\u003e10:20:10,14,15\u003c/code\u003e means \u003ccode class=\"literal\"\u003exmin=10, xmax=20, xip_list=10, 14, 15\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-SNAPSHOT-PARTS\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.85. Snapshot Components\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003exmin\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLowest transaction ID that was still active. All transaction IDs less than \u003ccode class=\"structfield\"\u003exmin\u003c/code\u003e are either committed and visible, or rolled back and dead.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003exmax\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOne past the highest completed transaction ID. All transaction IDs greater than or equal to \u003ccode class=\"structfield\"\u003exmax\u003c/code\u003e had not yet completed as of the time of the snapshot, and thus are invisible.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003exip_list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTransactions in progress at the time of the snapshot. A transaction ID that is \u003ccode class=\"literal\"\u003exmin \u0026lt;= \u003cem class=\"replaceable\"\u003e\u003ccode\u003eX\u003c/code\u003e\u003c/em\u003e \u0026lt; xmax\u003c/code\u003e and not in this list was already completed at the time of the snapshot, and thus is either visible or dead according to its commit status. This list does not include the transaction IDs of subtransactions (subxids).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eIn releases of \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e before 13 there was no \u003ccode class=\"type\"\u003exid8\u003c/code\u003e type, so variants of these functions were provided that used \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e to represent a 64-bit XID, with a correspondingly distinct snapshot data type \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e. These older functions have \u003ccode class=\"literal\"\u003etxid\u003c/code\u003e in their names. They are still supported for backward compatibility, but may be removed from a future release. See \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-TXID-SNAPSHOT\" title=\"Table 9.86. Deprecated Transaction ID and Snapshot Information Functions\"\u003eTable 9.86\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-TXID-SNAPSHOT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.86. Deprecated Transaction ID and Snapshot Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_current\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_current_xact_id()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_current_if_assigned\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_current_xact_id_if_assigned()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_current_snapshot\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etxid_snapshot\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_current_snapshot()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_snapshot_xip\u003c/code\u003e ( \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof bigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_snapshot_xip()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_snapshot_xmax\u003c/code\u003e ( \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_snapshot_xmax()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_snapshot_xmin\u003c/code\u003e ( \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003ebigint\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_snapshot_xmin()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_visible_in_snapshot\u003c/code\u003e ( \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003ccode class=\"type\"\u003etxid_snapshot\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003eboolean\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_visible_in_snapshot()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003etxid_status\u003c/code\u003e ( \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eSee \u003ccode class=\"function\"\u003epg_xact_status()\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-COMMIT-TIMESTAMP\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.9. Committed Transaction Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-COMMIT-TIMESTAMP\" title=\"Table 9.87. Committed Transaction Information Functions\"\u003eTable 9.87\u003c/a\u003e provide information about when past transactions were committed. They only provide useful data when the \u003ca class=\"xref\" href=\"/docs/18/runtime-config-replication.html#GUC-TRACK-COMMIT-TIMESTAMP\"\u003etrack_commit_timestamp\u003c/a\u003e configuration option is enabled, and only for transactions that were committed after it was enabled. Commit timestamp information is routinely removed during vacuum.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-COMMIT-TIMESTAMP\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.87. Committed Transaction Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_xact_commit_timestamp\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003etimestamp with time zone\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns the commit timestamp of a transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_xact_commit_timestamp_origin\u003c/code\u003e ( \u003ccode class=\"type\"\u003exid\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etimestamp\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eroident\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eReturns the commit timestamp and replication origin of a transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_last_committed_xact\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003exid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003exid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003etimestamp\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eroident\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns the transaction ID, commit timestamp and replication origin of the latest committed transaction.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-CONTROLDATA\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.10. Control Data Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-CONTROLDATA\" title=\"Table 9.88. Control Data Functions\"\u003eTable 9.88\u003c/a\u003e print information initialized during \u003ccode class=\"command\"\u003einitdb\u003c/code\u003e, such as the catalog version. They also show information about write-ahead logging and checkpoint processing. This information is cluster-wide, not specific to any one database. These functions provide most of the same information, from the same source, as the \u003ca class=\"xref\" href=\"/docs/18/app-pgcontroldata.html\" title=\"pg_controldata\"\u003e\u003cspan class=\"refentrytitle\"\u003e\u003cspan class=\"application\"\u003epg_controldata\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e application.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-CONTROLDATA\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.88. Control Data Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_checkpoint\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about current checkpoint state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-CHECKPOINT\" title=\"Table 9.89. pg_control_checkpoint Output Columns\"\u003eTable 9.89\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_system\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about current control file state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-SYSTEM\" title=\"Table 9.90. pg_control_system Output Columns\"\u003eTable 9.90\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_init\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about cluster initialization state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-INIT\" title=\"Table 9.91. pg_control_init Output Columns\"\u003eTable 9.91\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_control_recovery\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns information about recovery state, as shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-PG-CONTROL-RECOVERY\" title=\"Table 9.92. pg_control_recovery Output Columns\"\u003eTable 9.92\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-CHECKPOINT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.89. \u003ccode class=\"function\"\u003epg_control_checkpoint\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003echeckpoint_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eredo_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eredo_wal_file\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003etimeline_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eprev_timeline_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003efull_page_writes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_oid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_multixact_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enext_multi_offset\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_xid_dbid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_active_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_multi_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_multi_dbid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eoldest_commit_ts_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003enewest_commit_ts_xid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003exid\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003echeckpoint_time\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-SYSTEM\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.90. \u003ccode class=\"function\"\u003epg_control_system\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003epg_control_version\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ecatalog_version_no\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003esystem_identifier\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003ebigint\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003epg_control_last_modified\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etimestamp with time zone\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-INIT\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.91. \u003ccode class=\"function\"\u003epg_control_init\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_data_alignment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003edatabase_block_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eblocks_per_segment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ewal_block_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ebytes_per_wal_segment\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_identifier_length\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_index_columns\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emax_toast_chunk_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003elarge_object_chunk_size\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003efloat8_pass_by_value\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003edata_page_checksum_version\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003edefault_char_signedness\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-PG-CONTROL-RECOVERY\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.92. \u003ccode class=\"function\"\u003epg_control_recovery\u003c/code\u003e Output Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eColumn Name\u003c/th\u003e\n\u003cth\u003eData Type\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emin_recovery_end_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003emin_recovery_end_timeline\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einteger\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ebackup_start_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003ebackup_end_lsn\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"structfield\"\u003eend_of_backup_record_required\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eboolean\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-VERSION\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.11. Version Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-VERSION\" title=\"Table 9.93. Version Information Functions\"\u003eTable 9.93\u003c/a\u003e print version information.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-VERSION\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.93. Version Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eversion\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string describing the \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e server's version. You can also get this information from \u003ca class=\"xref\" href=\"/docs/18/runtime-config-preset.html#GUC-SERVER-VERSION\"\u003eserver_version\u003c/a\u003e, or for a machine-readable version use \u003ca class=\"xref\" href=\"/docs/18/runtime-config-preset.html#GUC-SERVER-VERSION-NUM\"\u003eserver_version_num\u003c/a\u003e. Software developers should use \u003ccode class=\"varname\"\u003eserver_version_num\u003c/code\u003e (available since 8.2) or \u003ca class=\"xref\" href=\"/docs/18/libpq-status.html#LIBPQ-PQSERVERVERSION\"\u003e\u003ccode class=\"function\"\u003ePQserverVersion\u003c/code\u003e\u003c/a\u003e instead of parsing the text version.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eunicode_version\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string representing the version of Unicode used by \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003eicu_unicode_version\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eReturns a string representing the version of Unicode used by ICU, if the server was built with ICU support; otherwise returns \u003ccode class=\"literal\"\u003eNULL\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sect2\" id=\"FUNCTIONS-INFO-WAL-SUMMARY\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"title\"\u003e9.27.12. WAL Summarization Information Functions \u003c/h3\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe functions shown in \u003ca class=\"xref\" href=\"/docs/18/functions-info.html#FUNCTIONS-WAL-SUMMARY\" title=\"Table 9.94. WAL Summarization Information Functions\"\u003eTable 9.94\u003c/a\u003e print information about the status of WAL summarization. See \u003ca class=\"xref\" href=\"/docs/18/runtime-config-wal.html#GUC-SUMMARIZE-WAL\"\u003esummarize_wal\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"FUNCTIONS-WAL-SUMMARY\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 9.94. WAL Summarization Information Functions\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003eFunction\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_available_wal_summaries\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etli\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003estart_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eend_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns information about the WAL summary files present in the data directory, under \u003ccode class=\"literal\"\u003epg_wal/summaries\u003c/code\u003e. One row will be returned per WAL summary file. Each file summarizes WAL on the indicated TLI within the indicated LSN range. This function might be useful to determine whether enough WAL summaries are present on the server to take an incremental backup based on some prior backup whose start LSN is known.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_wal_summary_contents\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003etli\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003estart_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eend_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e ) → \u003ccode class=\"returnvalue\"\u003esetof record\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003erelfilenode\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ereltablespace\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003ereldatabase\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003erelforknumber\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003esmallint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003erelblocknumber\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003eis_limit_block\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eboolean\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns one information about the contents of a single WAL summary file identified by TLI and starting and ending LSNs. Each row with \u003ccode class=\"literal\"\u003eis_limit_block\u003c/code\u003e false indicates that the block identified by the remaining output columns was modified by at least one WAL record within the range of records summarized by this file. Each row with \u003ccode class=\"literal\"\u003eis_limit_block\u003c/code\u003e true indicates either that (a) the relation fork was truncated to the length given by \u003ccode class=\"literal\"\u003erelblocknumber\u003c/code\u003e within the relevant range of WAL records or (b) that the relation fork was created or dropped within the relevant range of WAL records; in such cases, \u003ccode class=\"literal\"\u003erelblocknumber\u003c/code\u003e will be zero.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"func_table_entry\"\u003e\n\u003cp class=\"func_signature\"\u003e \u003ccode class=\"function\"\u003epg_get_wal_summarizer_state\u003c/code\u003e () → \u003ccode class=\"returnvalue\"\u003erecord\u003c/code\u003e ( \u003cem class=\"parameter\"\u003e\u003ccode\u003esummarized_tli\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003ebigint\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003esummarized_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003epending_lsn\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003epg_lsn\u003c/code\u003e, \u003cem class=\"parameter\"\u003e\u003ccode\u003esummarizer_pid\u003c/code\u003e\u003c/em\u003e \u003ccode class=\"type\"\u003eint\u003c/code\u003e )\u003c/p\u003e\n\u003cp\u003eReturns information about the progress of the WAL summarizer. If the WAL summarizer has never run since the instance was started, then \u003ccode class=\"literal\"\u003esummarized_tli\u003c/code\u003e and \u003ccode class=\"literal\"\u003esummarized_lsn\u003c/code\u003e will be \u003ccode class=\"literal\"\u003e0\u003c/code\u003e and \u003ccode class=\"literal\"\u003e0/0\u003c/code\u003e respectively; otherwise, they will be the TLI and ending LSN of the last WAL summary file written to disk. If the WAL summarizer is currently running, \u003ccode class=\"literal\"\u003epending_lsn\u003c/code\u003e will be the ending LSN of the last record that it has consumed, which must always be greater than or equal to \u003ccode class=\"literal\"\u003esummarized_lsn\u003c/code\u003e; if the WAL summarizer is not running, it will be equal to \u003ccode class=\"literal\"\u003esummarized_lsn\u003c/code\u003e. \u003ccode class=\"literal\"\u003esummarizer_pid\u003c/code\u003e is the PID of the WAL summarizer process, if it is running, and otherwise NULL.\u003c/p\u003e\n\u003cp\u003eAs a special exception, the WAL summarizer will refuse to generate WAL summary files if run on WAL generated under \u003ccode class=\"literal\"\u003ewal_level=minimal\u003c/code\u003e, since such summaries would be unsafe to use as the basis for an incremental backup. In this case, the fields above will continue to advance as if summaries were being generated, but nothing will be written to disk. Once the summarizer reaches WAL generated while \u003ccode class=\"literal\"\u003ewal_level\u003c/code\u003e was set to \u003ccode class=\"literal\"\u003ereplica\u003c/code\u003e or higher, it will resume writing summaries to disk.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e\n\u003c/div\u003e","related":[{"label":"pg_type catalog","url":"/wiki/catalog/pg_type/?v=18"},{"label":"pg_cast catalog","url":"/wiki/catalog/pg_cast/?v=18"},{"label":"pg_operator catalog","url":"/wiki/catalog/pg_operator/?v=18"},{"label":"pg_opclass catalog","url":"/wiki/catalog/pg_opclass/?v=18"},{"label":"Arrays","url":"/wiki/type/arrays/?v=18"}],"sections":[]}},"RequestedLocale":"zh-Hans","Fallback":true,"Versions":["10","11","12","13","14","15","16","17","18","19","20"],"Locales":["en"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
