Системные информационные функции и операторы

В Таблице 65 приведено несколько функций, которые извлекают информацию о сеансе и системе.

В дополнение к функциям, перечисленным в этом разделе, существует ряд функций, связанных с системой статистики, которые также предоставляют системную информацию. Дополнительную информацию см. в подразделе Просмотр статистики.

Таблица 65. Функции получения информации о сеансе

Функция

Описание

current_catalog → name

current_database () → name

Возвращает имя текущей базы данных. (В стандарте SQL базы данных называются «каталогами», поэтому стандартным написанием является current_catalog.)

current_query () → text

Возвращает текст запроса, выполняемого в данный момент, в том виде, в каком его прислал клиент (может содержать более одного оператора).

current_role → name

Это аналог current_user.

current_schema → name

current_schema () → name

Возвращает имя первой схемы в пути поиска (или значение NULL, если путь поиска пустой). Это схема, которая будет использоваться для всех таблиц или других именованных объектов, создающихся без указания целевой схемы.

current_schemas ( включить_неявные_схемы boolean ) → name[]

Возвращает массив имен всех схем, в настоящее время находящихся в действующем пути поиска, в порядке приоритетности. (Элементы в текущем значении search_path, которые не соответствуют существующим, пригодным для поиска схемам, опускаются). Если логический аргумент равен true, то в результат включаются неявно просматриваемые системные схемы, например pg_catalog.

current_user → name

Возвращает имя пользователя в текущем контексте выполнения.

inet_client_addr () → inet

Возвращает IP-адрес текущего клиента или NULL, если текущее соединение установлено через сокет домена Unix.

inet_client_port () → integer

Возвращает номер IP-порта текущего клиента или NULL, если текущее соединение установлено через сокет домена Unix.

inet_server_addr () → inet

Возвращает IP-адрес, через который сервер принял текущее подключение, или NULL, если текущее соединение установлено через сокет домена Unix.

inet_server_port () → integer

Возвращает номер IP-порта, через который сервер принял текущее подключение, или NULL, если текущее соединение установлено через сокет домена Unix.

pg_backend_pid () → integer

Возвращает идентификатор серверного процесса при текущем сеансе.

pg_blocking_pids ( integer ) → integer[]

Возвращает массив идентификаторов серверных процессов сеансов, которые блокируют серверный процесс с указанным идентификатором от получения блокировки, или пустой массив, если такого серверного процесса нет или он не заблокирован.
Один серверный процесс блокирует другой, если он либо удерживает блокировку, конфликтующую с запросом блокировки заблокированного процесса (жесткая блокировка), либо ожидает блокировку, которая может вызвать конфликт с запросом блокировки заблокированного процесса и находится перед ней в очереди ожидания (мягкая блокировка). При использовании параллельных запросов в результате всегда перечисляются видимые клиенту идентификаторы процессов (то есть результаты pg_backend_pid), даже если фактическая блокировка удерживается или ожидается дочерним рабочим процессом. Вследствие этого в результате могут быть дублирующиеся идентификаторы. Также обратите внимание, что когда конфликтующую блокировку удерживает подготовленная транзакция, она будет представлена нулевым идентификатором процесса.
Частые вызовы этой функции могут некоторым образом повлиять на производительность базы данных, поскольку ей на короткое время требуется эксклюзивный доступ к разделяемому состоянию менеджера блокировок.

pg_conf_load_time () → timestamp with time zone

Возвращает время, когда в последний раз загружались файлы конфигурации сервера. Если к этому времени текущий сеанс уже начался, она возвращает время, когда сам этот сеанс заново считал эти файлы конфигурации (поэтому в разных сеансах время прочтения будет немного различаться). В противном случае это будет время, когда файлы конфигурации повторно считал процесс qhbmaster.

pg_current_logfile ( [ text ] ) → text

Возвращает имя пути к файлу журнала, в данный момент используемому сборщиком упреждающих записей. Этот путь включает в себя каталог из log_directory и имя конкретного файла журнала. Если сборщик упреждающих записей выключен, результатом будет NULL. Если существует несколько файлов журналов в разных форматах, pg_current_logfile без аргумента возвращает путь к файлу, имеющему первый формат, из найденных в следующем упорядоченном списке: stderr, csvlog. Если файлов с любым из этих форматов нет, возвращается NULL. Чтобы запросить информацию о файле журнала в конкретном формате, передайте csvlog или stderr в качестве значения необязательного параметра. Если запрошенный формат журнала не сконфигурирован в log_destination, результатом будет NULL. Результат функции отражает содержимое файла current_logfiles.

pg_my_temp_schema () → oid

Возвращает OID временной схемы текущего сеанса или ноль, если такой схемы нет (потому что не создавались временные таблицы).

pg_is_other_temp_schema ( oid ) → boolean

Возвращает true, если заданный OID относится к временной схеме текущего сеанса. (Это может быть полезно, например, для исключения временных таблиц других сеансов из представления каталога.)

pg_jit_available () → boolean

Возвращает true, если имеется расширение JIT-компилятор (см. главу JIT-компиляция) и включен параметр конфигурации jit (установлен в on).

pg_listening_channels () → setof text

Возвращает набор имен каналов асинхронных уведомлений, которые прослушивает текущий сеанс.

pg_notification_queue_usage () → double precision

Возвращает долю (0–1) максимального размера очереди асинхронных уведомлений, которая в настоящий момент занята уведомлениями, ожидающими обработки. Дополнительную информацию см. на справочных страницах команд LISTEN и NOTIFY.

pg_qhbmaster_start_time () → timestamp with time zone

Возвращает время, когда был запущен сервер.

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

Возвращает массив идентификаторов процессов сеансов, блокирующих серверный процесс с заданным идентификатором от получения безопасного снимка, или пустой массив, если такого серверного процесса нет или он не заблокирован.
Сеанс, выполняющий транзакцию уровня SERIALIZABLE, блокирует транзакцию уровня SERIALIZABLE READ ONLY DEFERRABLE от получения снимка, пока та не определит, что можно безопасно избежать принятия предикатных блокировок. Дополнительную информацию о сериализуемых и откладываемых транзакциях см. в подразделе Уровень изоляции Serializable.
Частые вызовы этой функции могут некоторым образом повлиять на производительность базы данных, поскольку ей на короткое время требуется доступ к разделяемому состоянию менеджера предикатных блокировок.

pg_trigger_depth () → integer

Возвращает текущий уровень вложенности триггеров QHB (0, если эта функция вызывается не изнутри триггера, напрямую или косвенно).

session_user → name

Возвращает имя пользователя сеанса.

user → name

Это аналог current_user.

version () → text

Возвращает строку, описывающую версию сервера QHB. Эту информацию также можно получить из параметра server_version или, если нужен вариант, читаемый машиной, из параметра server_version_num. Разработчикам программного обеспечения следует использовать параметр server_version_num, а не анализировать текстовую версию.

Примечание
Функции current_catalog, current_role, current_schema, current_user, session_user и user имеют специальный синтаксический статус в SQL: они должны вызываться без завершающих скобок. В QHB скобки можно использовать с current_schema, но не с остальными функциями.

Функция session_user обычно возвращает имя пользователя, инициировавшего текущее соединение с базой данных; но суперпользователи могут изменить эту настройку с помощью команды SET SESSION AUTHORIZATION. Функция current_user возвращает идентификатор пользователя, который применим для проверки прав доступа. Обычно это тот же пользователь, что и пользователь сеанса, но его можно сменить с помощью команды SET ROLE. Он также изменяется во время выполнения функций с атрибутом SECURITY DEFINER. На языке Unix пользователь сеанса — это «реальный пользователь», а текущий пользователь — «эффективный пользователь». Функции current_role и user являются синонимами функции current_user. (Стандарт SQL проводит различие между current_role и current_user, но QHB этого не делает, поскольку объединяет пользователей и роли в единый вид сущностей).

В Таблице 66 перечислены функции, позволяющие программно запрашивать информацию о правах доступа к объекту. (Дополнительную информацию о правах см. в разделе Права.) В этих функциях пользователя, для которого запрашиваются права, можно указать по имени или OID (pg_authid.oid), либо, если имя задано как public, будут проверяться права псевдороли PUBLIC. Кроме того, аргумент user можно полностью опустить, и тогда будет подразумеваться current_user. Объект, к которому запрашиваются права доступа, тоже можно указать по имени или OID. Когда указывается имя, при необходимости в него можно включить имя схемы. Интересующие права доступа указываются в виде текстовой строки, которая должна задавать одно из ключевых слов права, допустимых для типа объекта (например SELECT). Дополнительно к типу права можно добавить WITH GRANT OPTION для проверки, разрешено ли пользователю передавать это право другим. Кроме того, можно перечислить несколько типов прав через запятую, и в этом случае результатом будет true, если у пользователя есть какое-либо из перечисленных прав. (Регистр в строке с правами не имеет значения, а между именами прав (но не внутри) разрешены лишние пробельные символы.) Несколько примеров:

SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable',
  'INSERT, SELECT WITH GRANT OPTION');

Таблица 66. Функции для проверки прав доступа

Функция

Описание

has_any_column_privilege ( [ пользователь name или oid, ] таблица text или oid, право text ) → boolean

Имеет ли пользователь указанное право для какого-либо столбца таблицы? Ответ положительный, если право имеется для всей таблице или право дано на уровне столбцов хотя бы для одного столбца. Допустимые типы прав: SELECT, INSERT, UPDATE и REFERENCES.

has_column_privilege ( [ пользователь name или oid, ] таблица text или oid, столбец text или smallint, право text ) → boolean

Имеет ли пользователь указанное право для заданного столбца таблицы? Ответ положительный, если право имеется для всей таблице или право дано на уровне столбцов для этого столбца. Столбец можно задать по имени или номеру атрибута (pg_attribute.attnum). Допустимые типы прав: SELECT, INSERT, UPDATE и REFERENCES.

has_database_privilege ( [ пользователь name или oid, ] база_данных text или oid, право text ) → boolean

Имеет ли пользователь указанное право для базы данных? Допустимые типы прав: CREATE, CONNECT, TEMPORARY и TEMP (это синоним TEMPORARY).

has_foreign_data_wrapper_privilege ( [ пользователь name или oid, ] обертка_сторонних_данных text или oid, право text ) → boolean

Имеет ли пользователь указанное право для обертки сторонних данных? Единственный допустимый тип права — USAGE.

has_function_privilege ( [ пользователь name или oid, ] функция text или oid, право text ) → boolean

Имеет ли пользователь указанное право для функции? Единственный допустимый тип права — EXECUTE.
Когда функция задается по имени, а не по OID, допускаются те же входные значения, что и для типа данных regprocedure (см. раздел Типы идентификаторов объектов). Например:

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

has_language_privilege ( [ пользователь name или oid, ] язык text или oid, право text ) → boolean

Имеет ли пользователь указанное право для языка? Единственный допустимый тип права — USAGE.

has_schema_privilege ( [ пользователь name или oid, ] схема text или oid, право text ) → boolean

Имеет ли пользователь указанное право для схемы? Допустимые типы прав: CREATE и USAGE.

has_sequence_privilege ( [ пользователь name или oid, ] последовательность text или oid, право text ) → boolean

Имеет ли пользователь указанное право для последовательности? Допустимые типы прав: USAGE, SELECT и UPDATE.

has_server_privilege ( [ пользователь name или oid, ] сервер text или oid, право text ) → boolean

Имеет ли пользователь указанное право для стороннего сервера? Единственный допустимый тип права — USAGE.

has_table_privilege ( [ пользователь name или oid, ] таблица text или oid, право text ) → boolean

Имеет ли пользователь указанное право для таблицы? Допустимые типы прав: SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES и TRIGGER.

has_tablespace_privilege ( [ пользователь name или oid, ] табличное_пространство text или oid, право text ) → boolean

Имеет ли пользователь указанное право для табличного пространства? Единственный допустимый тип права — CREATE.

has_type_privilege ( [ пользователь name или oid, ] тип text или oid, право text ) → boolean

Имеет ли пользователь указанное право для типа данных? Единственный допустимый тип права — USAGE. Когда тип задается по имени, а не по OID, допускаются те же входные значения, что и для типа данных regtype (см. раздел Типы идентификаторов объектов).

pg_has_role ( [ пользователь name или oid, ] роль text или oid, право text ) → boolean

Имеет ли пользователь указанное право для роли? Допустимые типы прав: MEMBER и USAGE. Право MEMBER обозначает непосредственное или косвенное членство в роли (то есть право выполнять SET ROLE), тогда как право USAGE обозначает, что права роли становятся доступны для пользователя сразу, без выполнения SET ROLE. Эта функция не поддерживает особый случай с указанием для пользователя (user) значения public, поскольку псевдороль PUBLIC не может быть членом настоящих ролей.

row_security_active ( таблица text или oid ) → boolean

Действует ли защита на уровне строк для заданной таблицы в контексте текущего пользователя и текущей среды?

В Таблице 67 приведены имеющиеся операторы для типа aclitem, который представляет права доступа в каталоге. Информацию о том, как читать значения прав доступа, см. в разделе Права.

Таблица 67. Операторы для aclitem

Оператор

Описание

Пример(ы)

aclitem = aclitem → boolean

Значения aclitem равны? (Обратите внимание, что у типа aclitem отсутствует обычный набор операторов сравнения; для него имеется только проверка равенства. В свою очередь, массивы aclitem тоже можно сопоставлять только на равенство.)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem → f

aclitem[] @> aclitem → boolean

Содержит ли массив заданные права? (Ответом будет true, если в массиве есть запись, соответствующая правоприобретателю и праводателю из aclitem и имеющая как минимум заданный набор прав.)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem → t

aclitem[] ~ aclitem → boolean

Это устаревший псевдоним для @>.

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitem → t

В Таблице 68 приведены некоторые дополнительные функции для управления типом aclitem.

Таблица 68. Функции для aclitem

Функция

Описание

acldefault ( тип "char", id_владельца oid ) → aclitem[]

Конструирует массив aclitem, содержащий действующие по умолчанию права доступа для объекта заданного типа, принадлежащего роли с OID id_владельца. Эта функция показывает права доступа, которые будут подразумеваться, когда запись ACL определенного объекта равна NULL. (Права доступа по умолчанию описаны в разделе Права.) Параметр тип может принимать одно из следующих значений: 'c' — столбец (COLUMN), 'r' — таблица (TABLE) и подобные таблице объекты, 's' — последовательность (SEQUENCE), 'd' — база данных (DATABASE), 'f' — функция (FUNCTION) или процедура (PROCEDURE), 'l' — язык (LANGUAGE), 'L' — большой объект (LARGE OBJECT), 'n' — схема (SCHEMA), 't' — табличное пространство (TABLESPACE), 'F' — обертка сторонних данных (FOREIGN DATA WRAPPER), 'S' — сторонний сервер (FOREIGN SERVER) или 'T' — тип (TYPE) или домен (DOMAIN).

aclexplode ( aclitem[] ) → setof record ( праводатель oid, правоприобретатель oid, тип_права text, предоставляемое boolean )

Возвращает массив aclitem в виде набора строк. Если правоприобретателем является псевдороль PUBLIC, в столбце правоприобретатель она представляется нулем. Все назначенные права представляются ключевыми словами SELECT, INSERT и т. д. Обратите внимание, что каждое право выводится отдельной строкой, поэтому в столбце тип_права находится только одно ключевое слово.

makeaclitem ( правоприобретатель oid, праводатель oid, права text, предоставляемые boolean ) → aclitem

Конструирует значение aclitem с заданными свойствами.

В Таблице 69 приведены функции, определяющие, является ли определенный объект видимым в текущем пути поиска схемы. Например, таблица считается видимой, если содержащая ее схема находится в пути поиска и таблица с таким именем не появляется ранее в пути поиска. Это равнозначно утверждению, что на таблицу можно ссылаться по имени без явного уточнения схемы. Таким образом, чтобы перечислить имена всех видимых таблиц, можно написать:

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

Для функций и операторов считается, что объект в пути поиска является видимым, если объект с таким именем и типом(ами) данных аргументов не появляется ранее в пути поиска. Для классов и семейств операторов учитывается не только имя, но и связанный индексный метод доступа.

Таблица 69. Функции проверки видимости схемы

Функция

Описание

pg_collation_is_visible ( правило_сортировки oid ) → boolean

Видимо ли правило сортировки в пути поиска?

pg_conversion_is_visible ( преобразование oid ) → boolean

Видимо ли преобразование в пути поиска?

pg_function_is_visible ( функция oid ) → boolean

Видима ли функция в пути поиска? (Также работает для процедур и агрегатов.)

pg_opclass_is_visible ( класс_операторов oid ) → boolean

Видим ли класс операторов в пути поиска?

pg_operator_is_visible ( оператор oid ) → boolean

Видим ли оператор в пути поиска?

pg_opfamily_is_visible ( семейство_операторов oid ) → boolean

Видимо ли семейство операторов в пути поиска?

pg_statistics_obj_is_visible ( объект_статистики oid ) → boolean

Видим ли объект статистики в пути поиска?

pg_table_is_visible ( таблица oid ) → boolean

Видима ли таблица в пути поиска? (Также работает для всех типов отношений, включая представления, материализованные представления, индексы, последовательности и сторонние таблицы.)

pg_ts_config_is_visible ( конфигурация oid ) → boolean

Видима ли конфигурация текстового поиска в пути поиска?

pg_ts_dict_is_visible ( словарь oid ) → boolean

Видим ли словарь текстового поиска в пути поиска?

pg_ts_parser_is_visible ( анализатор oid ) → boolean

Видим ли анализатор текстового поиска в пути поиска?

pg_ts_template_is_visible ( шаблон oid ) → boolean

Видим ли шаблон текстового поиска в пути поиска?

pg_type_is_visible ( тип oid ) → boolean

Видим ли тип (или домен) в пути поиска?

Всем этим функциям для идентификации подлежащего проверке объекта требуется его OID. Если нужно проверить объект по имени, удобно использовать типы-псевдонимы OID (regclass, regtype, regprocedure, regoperator, regconfig или regdictionary), например:

SELECT pg_type_is_visible('myschema.widget'::regtype);

Обратите внимание, что не имеет смысла проверять таким способом имя типа, не дополненное схемой — если имя вообще можно распознать, оно должно быть видимым.

В Таблице 70 перечислены функции, которые извлекают информацию из системных каталогов.

Таблица 70. Функции для получения информации из системных каталогов

Функция

Описание

format_type ( тип oid, модификатор_типа integer ) → text

Возвращает в формате SQL имя типа данных, идентифицируемого по OID и, возможно, модификатору типа. Если конкретный модификатор неизвестен, вместо него можно передать NULL.

pg_get_catalog_foreign_keys () → setof record ( ссылающ_таблица regclass, ссылающ_столбцы text[], ссылочн_таблица regclass, ссылочн_столбцы text[], является_массивом boolean, необязательно boolean )

Возвращает набор записей, описывающих отношения внешних ключей, существующие в системных каталогах QHB. Столбец ссылающ_таблица содержит имя ссылающегося каталога, а столбец ссылающ_столбцы — имена ссылающихся столбцов. Аналогичным образом столбец ссылочн_таблица содержит имя ссылочного каталога, а столбец ссылочн_столбцы — имена ссылочных столбцов. Если параметр является_массивом равен true, последний ссылающийся столбец является массивом, каждый из элементов которого должен соответствовать некоторой записи в ссылочном каталоге. Если параметр необязательно равен true, ссылочным столбцам можно содержать нули вместо действительной ссылки.

pg_get_constraintdef ( ограничение oid [, удобный_формат boolean ] ) → text

Восстанавливает команду, создающую ограничение. (Это декомпилированное восстановление, а не оригинальный текст команды.)

pg_get_expr ( выражение pg_node_tree, отношение oid [, удобный_формат boolean ] ) → text

Декомпилирует внутреннюю форму выражений, хранящихся в системных каталогах, например, значение по умолчанию для столбца. Если это выражение может содержать переменные (Var), задайте во втором параметре OID отношения, к которому они обращаются; если переменных не ожидается, достаточно передать ноль.

pg_get_functiondef ( функция oid ) → text

Восстанавливает команду, создающую функцию или процедуру. (Это декомпилированное восстановление, а не оригинальный текст команды.) Результатом является полноценный оператор CREATE OR REPLACE FUNCTION или CREATE OR REPLACE PROCEDURE.

pg_get_function_arguments ( функция oid ) → text

Восстанавливает список аргументов функции или процедуры в той форме, в какой он должен находиться в команде CREATE FUNCTION (включая значения по умолчанию).

pg_get_function_identity_arguments ( функция oid ) → text

Восстанавливает список аргументов, необходимый для идентификации функции или процедуры, в той форме, в какой он должен находиться, например, в команде ALTER FUNCTION. В этой форме значения по умолчанию опускаются.

pg_get_function_result ( функция oid ) → text

Восстанавливает в функции предложение RETURNS в той форме, в какой оно должно находиться в команде CREATE FUNCTION. Для процедуры возвращает NULL.

pg_get_indexdef ( индекс oid [, столбец integer, удобный_формат boolean ] ) → text

Восстанавливает команду, создающую индекс. (Это декомпилированное восстановление, а не оригинальный текст команды.) Если передается значение столбца и оно отлично от нуля, восстанавливается только определение этого столбца.

pg_get_keywords () → setof record ( слово text, код_кат "char", откр_метка boolean, описание_кат text, описание_метки text )

Возвращает набор записей, описывающих ключевые слова SQL, распознаваемые сервером. Столбец слово содержит ключевое слово. Столбец код_кат содержит код категории: U — незарезервированное ключевое слово, C — ключевое слово, которое может быть именем столбца, T — ключевое слово, которое может быть именем типа или функции, или R — полностью зарезервированное ключевое слово. Столбец откр_метка содержит true, если ключевое слово можно использовать в качестве «открытой» метки столбца в списках SELECT, или false, если его можно использовать только после AS. Столбец описание_кат содержит возможно локализованную строку, описывающую категорию ключевого слова. Столбец описание_метки содержит возможно локализованную строку, описывающую статус метки столбца с ключевым словом.

pg_get_ruledef ( правило oid [, удобный_формат boolean ] ) → text

Восстанавливает команду, создающую правило. (Это декомпилированное восстановление, а не оригинальный текст команды.)

pg_get_serial_sequence ( таблица text, столбец text ) → text

Возвращает имя последовательности, связанной со столбцом, или NULL, если с этим столбцом не связано никакой последовательности. Если это столбец идентификации, то связанная последовательность внутренне создана для этого столбца. Для столбцов, созданных с одним из последовательных типов (serial, smallserial, bigserial), это последовательность, созданная для объявления этого последовательного столбца. В последнем случае эту связь можно изменить или убрать с помощью команды ALTER SEQUENCE OWNED BY. (Возможно, эту функцию следовало назвать pg_get_owned_sequence; ее текущее название отражает тот факт, что исторически она использовалась со столбцами последовательных типов.) Первым параметром является имя таблицы (возможно, дополненное схемой), а вторым — имя столбца. Поскольку первый параметр потенциально содержит имена схемы и таблицы, он анализируется по обычным правилам SQL, подразумевающим, что он по умолчанию приводится к нижнему регистру. Второй параметр, являясь просто именем столбца, воспринимается буквально, поэтому его регистр сохраняется неизменным. Результат форматируется надлежащим образом для передачи функциям для последовательностей (см. раздел Функции для управления последовательностями).
Обычно эта функция используется для прочтения текущего значения последовательности для столбца идентификации или последовательного столбца, например:

SELECT currval(pg_get_serial_sequence('sometable', 'id'));

pg_get_statisticsobjdef ( объект_статистики oid ) → text

Восстанавливает команду, создающую объект расширенной статистики. (Это декомпилированное восстановление, а не оригинальный текст команды.)

pg_get_triggerdef ( триггер oid [, удобный_формат boolean ] ) → text

Восстанавливает команду, создающую триггер. (Это декомпилированное восстановление, а не оригинальный текст команды.)

pg_get_userbyid ( роль oid ) → name

Возвращает имя роли по заданному OID.

pg_get_viewdef ( представление oid [, удобный_формат boolean ] ) → text

Восстанавливает нижележащую команду SELECT для представления или материализованного представления. (Это декомпилированное восстановление, а не оригинальный текст команды.)

pg_get_viewdef ( представление oid, число_столбцов integer ) → text

Восстанавливает нижележащую команду SELECT для представления или материализованного представления. (Это декомпилированное восстановление, а не оригинальный текст команды.) В этой форме всегда включен форматированный вывод, и длинные строки переносятся, чтобы текст умещался в заданное число столбцов.

pg_get_viewdef ( представление text [, удобный_формат boolean ] ) → text

Восстанавливает нижележащую команду SELECT для представления или материализованного представления, принимая вместо OID его текстовое имя. (Это декомпилированное восстановление, а не оригинальный текст команды.)

pg_index_column_has_property ( индекс regclass, столбец integer, свойство text ) → boolean

Проверяет, есть ли у столбца индекса именованное свойство. Типичные свойства индексных столбцов перечислены в Таблице 71. (Обратите внимание, что расширенные методы доступа могут определить для своих индексов дополнительные имена свойств.) Если имя свойства неизвестно или неприменимо к конкретному объекту, либо если OID или номер столбца не идентифицируют действительный объект, возвращается NULL.

pg_index_has_property ( индекс regclass, свойство text ) → boolean

Проверяет, есть ли у индекса именованное свойство. Типичные свойства индексов перечислены в Таблице 72. (Обратите внимание, что расширенные методы доступа могут определить для своих индексов дополнительные имена свойств.) Если имя свойства неизвестно или неприменимо к конкретному объекту, либо если OID не идентифицирует действительный объект, возвращается NULL.

pg_indexam_has_property ( метод_доступа oid, свойство text ) → boolean

Проверяет, есть ли у индексного метода доступа именованное свойство. Свойства методов доступа перечислены в Таблице 73. Если имя свойства неизвестно или неприменимо к конкретному объекту, либо если OID не идентифицирует действительный объект, возвращается NULL.

pg_options_to_table ( массив_параметров text[] ) → setof record ( имя_параметра text, значение_параметра text )

Возвращает набор параметров хранилища, представленных значением из pg_class.reloptions или pg_attribute.attoptions.

pg_tablespace_databases ( табличное_пространство oid ) → setof oid

Возвращает набор OID баз данных, объекты которых размещены в заданном табличном пространстве. Если эта функция возвращает какие-либо строки, значит, табличное пространство не пустое и не может быть удалено. Для идентификации конкретный объектов, наполняющих табличное пространство, понадобится подключиться к базам данных, идентифицированным функцией pg_tablespace_databases, и запросить их каталоги pg_class.

pg_tablespace_location ( табличное_пространство oid ) → text

Возвращает путь в файловой системе, в котором расположено табличное пространство.

pg_typeof ( "any" ) → regtype

Возвращает OID типа данных переданного ей значения. Это может быть полезно для решения проблем или динамического конструирования запросов SQL. Эта функция объявлена как возвращающая тип regtype, являющийся типом-псевдонимом OID (см. раздел Типы идентификаторов объектов); это означает, что значения этого типа сравниваются так же, как OID, но отображаются как имя типа.
Например:


    SELECT pg_typeof(33);
     pg_typeof
    -----------
      integer
SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
 typlen
--------
      4</code></pre></p></td>

COLLATION FOR ( "any" ) → text

Возвращает имя правила сортировки переданного ей значения. При необходимости это значение заключается в кавычки и дополняется схемой. Если для выражения аргумента не было получено ни одного правила сортировки, возвращается NULL. Если же правила сортировки не подходят для типа данных аргумента, возникает ошибка.
Например:


    SELECT collation for (description) FROM pg_description LIMIT 1;
     pg_collation_for
    ------------------
      "default"
SELECT collation for ('foo' COLLATE "de_DE");
 pg_collation_for
------------------
 "de_DE"</code></pre></p></td>

to_regclass ( text ) → regclass

Переводит текстовое имя отношения в его OID. Похожий результат можно получить, приведя строку к типу regclass (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regcollation ( text ) → regcollation

Переводит текстовое имя правила сортировки в его OID. Похожий результат можно получить, приведя строку к типу regcollation (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regnamespace ( text ) → regnamespace

Переводит текстовое имя схемы в ее OID. Похожий результат можно получить, приведя строку к типу regnamespace (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regoper ( text ) → regoper

Переводит текстовое имя оператора в его OID. Похожий результат можно получить, приведя строку к типу regoper (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено или окажется неоднозначным, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regoperator ( text ) → regoperator

Переводит текстовое имя оператора (с типами параметров) в его OID. Похожий результат можно получить, приведя строку к типу regoperator (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regproc ( text ) → regproc

Переводит текстовое имя функции или процедуры в ее OID. Похожий результат можно получить, приведя строку к типу regproc (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено или окажется неоднозначным, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regprocedure ( text ) → regprocedure

Переводит текстовое имя функции или процедуры (с типами аргументов) в ее OID. Похожий результат можно получить, приведя строку к типу regprocedure (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regrole ( text ) → regrole

Переводит текстовое имя роли в ее OID. Похожий результат можно получить, приведя строку к типу regrole (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

to_regtype ( text ) → regtype

Переводит текстовое имя типа в его OID. Похожий результат можно получить, приведя строку к типу regtype (см. раздел Типы идентификаторов объектов); однако если имя не будет найдено, эта функция вернет NULL, а не выдаст ошибку. Кроме того, в отличие от приведения, эта функция не принимает на вход числовые OID.

Большинство функций, восстанавливающих (декомпилирующих) объекты базы данных, принимают дополнительный флаг pretty, и если он равен true, то результат будет получен в форматированном виде. В форматированном выводе для удобочитаемости убираются лишние скобки и добавляются пробельные символы. Такой формат легче читается, но формат по умолчанию с большей вероятностью будет успешно восприниматься будущими версиями QHB, поэтому при дампировании рекомендуется воздержаться от использования форматированного вывода. Если в параметре pretty передается false, возвращается тот же результат, что и при отсутствии этого параметра.

Таблица 71. Свойства столбца индекса

ИмяОписание
ascСортируется ли столбец в порядке возрастания при сканировании вперед?
descСортируется ли столбец в порядке убывания при сканировании вперед?
nulls_firstСортируется ли столбец с выдачей NULL в начале при сканировании вперед?
nulls_lastСортируется ли столбец с выдачей NULL в конце при сканировании вперед?
orderableИмеет ли столбец какой-либо определенный порядок сортировки?
distance_orderableМожет ли столбец сканироваться по порядку оператором «расстояния», например, ORDER BY столбец <-> константа?
returnableМожет ли значение столбца быть возвращено при сканировании только индекса?
search_arrayОбладает ли столбец внутренней поддержкой поиска столбец = ANY(массив)?
search_nullsПоддерживает ли столбец поиск IS NULL и IS NOT NULL?

Таблица 72. Свойства индекса

ИмяОписание
clusterableМожно ли использовать индекс в команде CLUSTER?
index_scanПоддерживает ли индекс обычное сканирование (не по битовой карте)?
bitmap_scanПоддерживает ли индекс сканирование по битовой карте?
backward_scanМожно ли в процессе сканирования изменить его направление (для поддержки FETCH BACKWARD на курсоре без необходимости материализации)?

Таблица 73. Свойства индексного метода доступа

ИмяОписание
can_orderПоддерживает ли метод доступа ASC, DESC и связанные ключевые слова в команде CREATE INDEX?
can_uniqueПоддерживает ли метод доступа уникальные индексы?
can_multi_colПоддерживает ли метод доступа индексы с несколькими столбцами?
can_excludeПоддерживает ли метод доступа исключающие ограничения?
can_includeПоддерживает ли метод доступа предложение INCLUDE в команде CREATE INDEX?

В Таблице 74 перечислены функции, связанные с идентификацией и адресацией объектов базы данных.

Таблица 74. Функции для получения информации и адресации объектов

Функция

Описание

pg_describe_object ( id_класса oid, id_объекта oid, id_подобъекта integer ) → text

Возвращает текстовое описание объекта базы данных, идентифицированного по OID каталога, OID объекта и ID подобъекта (например, номер столбца в таблице; ID подобъекта равен нулю при обращении к объекту в целом). Данное описание предназначено для прочтения человеком и может быть переведено, в зависимости от конфигурации сервера. Это особенно полезно для идентификации объекта, на который ссылается каталог pg_depend. Эта функция возвращает значения NULL для неопределенных объектов.

pg_identify_object ( id_класса oid, id_объекта oid, id_подобъекта integer ) → record ( тип text, схема text, имя text, идентификатор text )

Возвращает строку, содержащую достаточно информации для однозначной идентификации объекта базы данных по указанным OID каталога, OID объекта и ID подобъекта. Эта информация предназначена для прочтения машиной и поэтому никогда не переводится. Столбец тип определяет тип объекта базы данных; схема — это имя схемы, к которой относится объект, или NULL для типов объектов, не относящихся к схемам; имя — это имя объекта, при необходимости заключенное в кавычки, если этого имени (вместе с именем схемы, если применимо) достаточно для однозначной идентификации объекта, в иных случаях — NULL; идентификатор — это полный идентификатор объекта, точный формат которого зависит от типа объекта, а каждое имя в этом формате дополнено схемой и при необходимости заключено в кавычки. Для неопределенных объектов указываются значения NULL.

pg_identify_object_as_address ( id_класса oid, id_объекта oid, id_подобъекта integer ) → record ( тип text, имена_объектов text[], аргументы_объектов text[] )

Возвращает строку, содержащую достаточно информации для однозначной идентификации объекта базы данных по указанным OID каталога, OID объекта и ID подобъекта. Возвращаемая информация не зависит от текущего сервера, то есть ее можно использовать для идентификации одноименного объекта на другом сервере. Столбец тип определяет тип объекта базы данных; имена_объектов и аргументы_объектов представляют собой текстовые массивы, в совокупности формирующие ссылку на объект. Эти три значения можно передать функции pg_get_object_address, чтобы получить внутренний адрес объекта.

pg_get_object_address ( тип text, имена_объектов text[], аргументы_объектов text[] ) → record ( id_класса oid, id_объекта oid, id_подобъекта integer )

Возвращает строку, содержащую достаточно информации для однозначной идентификации объекта базы данных по указанным коду типа и массивам имен и аргументов объекта. Возвращаемые значения можно использовать в системных каталогах, например, в pg_depend; их можно передать другим системным функциям, например pg_describe_object или pg_identify_object. Столбец id_класса — это OID системного каталога, содержащего объект; id_объекта — OID самого объекта, а id_подобъекта — ID подобъекта или ноль, если такового нет. Эта функция обратна pg_identify_object_as_address. Для неопределенных объектов указываются значения NULL.

Функции, приведенные в Таблице 75, извлекают комментарии, ранее сохраненные командой COMMENT. Если найти комментарий для заданных параметров невозможно, возвращается NULL.

Таблица 75. Функции для получения комментариев

Функция

Описание

col_description ( таблица oid, столбец integer ) → text

Возвращает комментарий для столбца таблицы, заданного по OID таблицы и номеру самого столбца. (Функцию obj_description нельзя использовать для столбцов таблиц, поскольку столбцы не имеют собственных OID.)

obj_description ( объект oid, каталог name ) → text

Возвращает комментарий для объекта базы данных, заданного по OID и имени системного каталога, в котором этот объект находится. Например, при вызове obj_description(123456, 'pg_class') будет получен комментарий для таблицы с OID 123456.

obj_description ( объект oid ) → text

Возвращает комментарий для объекта базы данных, заданного только по OID. Эта функция является устаревшей, поскольку нет гарантии, что OID уникальны в разных системных каталогах; таким образом, может быть выдан неправильный комментарий.

shobj_description ( объект oid, каталог name ) → text

Возвращает комментарий для общего объекта базы данных, заданного по OID и имени системного каталога, в котором этот объект находится. Эта функция похожа на obj_description, за исключением того, что она используется для извлечения комментариев для общих объектов (то есть баз данных, ролей и табличных пространств). Некоторые системные каталоги являются глобальными для всех баз данных в каждом кластере, и описания объектов в них тоже хранятся глобально.

Функции, приведенные в Таблице 76, предоставляют информацию о серверных транзакциях в экспортируемой форме. В основном эти функции используются для определения того, какие транзакции были зафиксированы между двумя снимками состояния.

Таблица 76. Функции для получения информации об идентификаторах транзакций и снимках состояния

Функция

Описание

pg_current_xact_id () → xid8

Возвращает идентификатор текущей транзакции. Если у текущей транзакции еще нет идентификатора (поскольку она не осуществила никаких изменения в базе данных), он будет ей назначен.

pg_current_xact_id_if_assigned () → xid8

Возвращает идентификатор текущей транзакции или NULL, если он еще не назначен. (Если транзакция может быть только читающей, лучше воспользоваться этим вариантом, чтобы избежать излишнего потребления XID.)

pg_xact_status ( xid8 ) → text

Сообщает статус фиксации недавней транзакции. Результатом может быть одно из следующих значений: in progress (выполняется), committed (зафиксирована) или aborted (прервана), при условии, что транзакция выполнялась достаточно недавно, чтобы система еще хранила информацию о статусе ее фиксации. Если же транзакция достаточно стара, чтобы в системе не осталось о ней упоминаний, и информация о статусе фиксации была стерта, результатом будет NULL. Приложения могут использовать эту функцию, например, чтобы определить, была ли транзакция зафиксирована или прервана после потери соединения между приложением и сервером баз данных в процессе выполнения COMMIT. Обратите внимание, что для подготовленных транзакций выдается статус in progress; если приложениям нужно определить, является ли транзакция с заданным идентификатором подготовленной, они должны проверить каталог pg_prepared_xacts.

pg_current_snapshot () → pg_snapshot

Возвращает текущий снимок состояния — структуру данных, показывающую, какие транзакции сейчас выполняются.

pg_snapshot_xip ( pg_snapshot ) → setof xid8

Возвращает набор идентификаторов выполняющихся транзакций, содержащихся в снимке состояния.

pg_snapshot_xmax ( pg_snapshot ) → xid8

Возвращает значение xmax для снимка состояния.

pg_snapshot_xmin ( pg_snapshot ) → xid8

Возвращает значение xmin для снимка состояния.

pg_visible_in_snapshot ( xid8, pg_snapshot ) → boolean

Видима ли транзакция с заданным идентификатором согласно этому снимку состояния (то есть была ли она завершена до того, как был получен снимок)? Обратите внимание, что эта функция не выдаст правильный ответ, если задать идентификатор субтранзакции.

Внутренний тип идентификатора транзакции xid имеет ширину 32 бита и значения в нем повторяются каждые 4 миллиарда транзакций. Однако функции, перечисленные в Таблице 76, используют 64-битный тип xid8, значения которого не повторяются на протяжении жизни сервера и который при необходимости можно преобразовать в тип xid. Тип данных pg_snapshot хранит информацию о видимости транзакций в конкретный момент времени. Его компоненты описаны в Таблице 77. Текстовым представлением pg_snapshot является xmin:xmax:xip_list. Например, запись 10:20:10,14,15 означает xmin=10, xmax=20, xip_list=10, 14, 15.

Таблица 77. Компоненты снимка состояния

ИмяОписание
xminМинимальный идентификатор транзакции, который все еще активен. Все транзакции, идентификаторы которых меньше xmin, либо зафиксированы и видимы, либо отменены и неактивны.
xmaxИдентификатор на один больше максимального идентификатора завершенной транзакции. Все транзакции, идентификаторы которых больше или равны xmax, еще не завершены на момент получения снимка состояния и поэтому невидимы.
xip_listТранзакции, выполняющиеся на момент получения снимка состояния. Транзакции с идентификаторами, для которых xmin <= id < xmax, не попавшие в этот список, были уже завершены к моменту получения снимка и поэтому либо видимы, либо неактивны, в зависимости от статуса фиксации. Идентификаторы субтранзакций в этот список не включены.

В более старых версиях QHB отсутствовал тип xid8, поэтому предоставлялись варианты этих функций, в которых для представления 64-битных XID использовался тип bigint, а также, соответственно, имелся отдельный тип для информации о снимке состояния — txid_snapshot. В названиях этих старых функций фигурирует txid. Они все еще поддерживаются в целях обратной совместимости, но могут быть удалены в будущем. См. Таблицу 78.

Таблица 78. Устаревшие функции для получения информации об идентификаторах транзакций и снимках состояния

Функция

Описание

txid_current () → bigint

См. pg_current_xact_id().

txid_current_if_assigned () → bigint

См. pg_current_xact_id_if_assigned().

txid_current_snapshot () → txid_snapshot

См. pg_current_snapshot().

txid_snapshot_xip ( txid_snapshot ) → setof bigint

См. pg_snapshot_xip().

txid_snapshot_xmax ( txid_snapshot ) → bigint

См. pg_snapshot_xmax().

txid_snapshot_xmin ( txid_snapshot ) → bigint

См. pg_snapshot_xmin().

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

См. pg_visible_in_snapshot().

txid_status ( bigint ) → text

См. pg_xact_status().

Функции, приведенные в Таблице 79, предоставляют информацию о том, когда были зафиксированы уже завершенные транзакции. Они выдают полезные данные только при включенном параметре конфигурации track_commit_timestamp и только для тех транзакций, которые были зафиксированы после его включения.

Таблица 79. Функции для получения информации о зафиксированных транзакциях

Функция

Описание

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

Возвращает время фиксации транзакции.

pg_xact_commit_timestamp_origin ( xid ) → record ( метка_времени timestamp with time zone, id_ист_репл oid)

Возвращает время фиксации и источник репликации транзакции.

pg_last_committed_xact () → record ( id_транзакции xid, метка_времени timestamp with time zone, id_ист_репл oid )

Возвращает идентификатор, время фиксации и источник репликации последней зафиксированной транзакции.

Функции, приведенные в Таблице 80, выдают информацию, инициализированную во время qhb_bootstrap, например версию каталога. Они также показывают информацию о протоколировании в журнал упреждающей записи и обработке контрольных точек. Эта информация относится ко всему кластеру, а не к какой-либо одной базе данных. Эти функции по большей части предоставляют ту же информацию и из того же источника, что и приложение qhb_controldata.

Таблица 80. Функции для управления данными

Функция

Описание

pg_control_checkpoint () → record

Возвращает информацию о текущем состоянии контрольных точек, показанную в Таблице 81.

pg_control_system () → record

Возвращает информацию о текущем состоянии управляющего файла, показанную в Таблице 82.

pg_control_init () → record

Возвращает информацию о состоянии инициализации кластера, показанную в Таблице 83.

pg_control_recovery () → record

Возвращает информацию о состоянии восстановления, показанную в Таблице 84.

Таблица 81. Столбцы результата pg_control_checkpoint

Имя столбцаТип данных
checkpoint_lsnpg_lsn
redo_lsnpg_lsn
redo_wal_filetext
timeline_idinteger
prev_timeline_idinteger
full_page_writesboolean
next_xidtext
next_oidoid
next_multixact_idxid
next_multi_offsetxid
oldest_xidxid
oldest_xid_dbidoid
oldest_active_xidxid
oldest_multi_xidxid
oldest_multi_dbidoid
oldest_commit_ts_xidxid
newest_commit_ts_xidxid
checkpoint_timetimestamp with time zone

Таблица 82. Столбцы результата pg_control_system

Имя столбцаТип данных
pg_control_versioninteger
catalog_version_nointeger
system_identifierbigint
pg_control_last_modifiedtimestamp with time zone

Таблица 83. Столбцы результата pg_control_init

Имя столбцаТип данных
max_data_alignmentinteger
database_block_sizeinteger
blocks_per_segmentinteger
wal_block_sizeinteger
bytes_per_wal_segmentinteger
max_identifier_lengthinteger
max_index_columnsinteger
max_toast_chunk_sizeinteger
large_object_chunk_sizeinteger
float8_pass_by_valueboolean
data_page_checksum_versioninteger

Таблица 84. Столбцы результата pg_control_recovery

Имя столбцаТип данных
min_recovery_end_lsnpg_lsn
min_recovery_end_timelineinteger
backup_start_lsnpg_lsn
backup_end_lsnpg_lsn
end_of_backup_record_requiredboolean