Системные информационные функции и операторы
В Таблице 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_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[] |
||
Возвращает массив идентификаторов процессов сеансов, блокирующих серверный процесс с заданным идентификатором от получения безопасного снимка, или пустой массив, если такого серверного процесса нет или он не заблокирован. |
||
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.
|
||
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 обозначает непосредственное или косвенное членство в роли (то есть право выполнять |
||
row_security_active ( таблица text или oid ) → boolean |
||
Действует ли защита на уровне строк для заданной таблицы в контексте текущего пользователя и текущей среды? |
В Таблице 67 приведены имеющиеся операторы для типа aclitem, который представляет права доступа в каталоге. Информацию о том, как читать значения прав доступа, см. в разделе Права.
Таблица 67. Операторы для aclitem
Оператор |
||
---|---|---|
Описание Пример(ы) |
||
aclitem = aclitem → boolean |
||
Значения aclitem равны? (Обратите внимание, что у типа aclitem отсутствует обычный набор операторов сравнения; для него имеется только проверка равенства. В свою очередь, массивы aclitem тоже можно сопоставлять только на равенство.)
|
||
aclitem[] @> aclitem → boolean |
||
Содержит ли массив заданные права? (Ответом будет true, если в массиве есть запись, соответствующая правоприобретателю и праводателю из aclitem и имеющая как минимум заданный набор прав.)
|
||
aclitem[] ~ aclitem → boolean |
||
Это устаревший псевдоним для
|
В Таблице 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 |
||
Восстанавливает команду, создающую функцию или процедуру. (Это декомпилированное восстановление, а не оригинальный текст команды.) Результатом является полноценный оператор |
||
pg_get_function_arguments ( функция oid ) → text |
||
Восстанавливает список аргументов функции или процедуры в той форме, в какой он должен находиться в команде |
||
pg_get_function_identity_arguments ( функция oid ) → text |
||
Восстанавливает список аргументов, необходимый для идентификации функции или процедуры, в той форме, в какой он должен находиться, например, в команде |
||
pg_get_function_result ( функция oid ) → text |
||
Восстанавливает в функции предложение RETURNS в той форме, в какой оно должно находиться в команде |
||
pg_get_indexdef ( индекс oid [, столбец integer, удобный_формат boolean ] ) → text |
||
Восстанавливает команду, создающую индекс. (Это декомпилированное восстановление, а не оригинальный текст команды.) Если передается значение столбца и оно отлично от нуля, восстанавливается только определение этого столбца. |
||
pg_get_keywords () → setof record ( слово text, код_кат "char", откр_метка boolean, описание_кат text, описание_метки text ) |
||
Возвращает набор записей, описывающих ключевые слова SQL, распознаваемые сервером. Столбец слово содержит ключевое слово. Столбец код_кат содержит код категории: U — незарезервированное ключевое слово, C — ключевое слово, которое может быть именем столбца, T — ключевое слово, которое может быть именем типа или функции, или R — полностью зарезервированное ключевое слово. Столбец откр_метка содержит true, если ключевое слово можно использовать в качестве «открытой» метки столбца в списках |
||
pg_get_ruledef ( правило oid [, удобный_формат boolean ] ) → text |
||
Восстанавливает команду, создающую правило. (Это декомпилированное восстановление, а не оригинальный текст команды.) |
||
pg_get_serial_sequence ( таблица text, столбец text ) → text |
||
Возвращает имя последовательности, связанной со столбцом, или NULL, если с этим столбцом не связано никакой последовательности. Если это столбец идентификации, то связанная последовательность внутренне создана для этого столбца. Для столбцов, созданных с одним из последовательных типов (serial, smallserial, bigserial), это последовательность, созданная для объявления этого последовательного столбца. В последнем случае эту связь можно изменить или убрать с помощью команды
|
||
pg_get_statisticsobjdef ( объект_статистики oid ) → text |
||
Восстанавливает команду, создающую объект расширенной статистики. (Это декомпилированное восстановление, а не оригинальный текст команды.) |
||
pg_get_triggerdef ( триггер oid [, удобный_формат boolean ] ) → text |
||
Восстанавливает команду, создающую триггер. (Это декомпилированное восстановление, а не оригинальный текст команды.) |
||
pg_get_userbyid ( роль oid ) → name |
||
Возвращает имя роли по заданному OID. |
||
pg_get_viewdef ( представление oid [, удобный_формат boolean ] ) → text |
||
Восстанавливает нижележащую команду |
||
pg_get_viewdef ( представление oid, число_столбцов integer ) → text |
||
Восстанавливает нижележащую команду |
||
pg_get_viewdef ( представление text [, удобный_формат boolean ] ) → text |
||
Восстанавливает нижележащую команду |
||
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, но отображаются как имя типа.
| ||
COLLATION FOR ( "any" ) → text |
||
Возвращает имя правила сортировки переданного ей значения. При необходимости это значение заключается в кавычки и дополняется схемой. Если для выражения аргумента не было получено ни одного правила сортировки, возвращается NULL. Если же правила сортировки не подходят для типа данных аргумента, возникает ошибка.
| ||
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? |
Имя | Описание |
---|---|
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 ( объект 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. Приложения могут использовать эту функцию, например, чтобы определить, была ли транзакция зафиксирована или прервана после потери соединения между приложением и сервером баз данных в процессе выполнения |
||
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_lsn | pg_lsn |
redo_lsn | pg_lsn |
redo_wal_file | text |
timeline_id | integer |
prev_timeline_id | integer |
full_page_writes | boolean |
next_xid | text |
next_oid | oid |
next_multixact_id | xid |
next_multi_offset | xid |
oldest_xid | xid |
oldest_xid_dbid | oid |
oldest_active_xid | xid |
oldest_multi_xid | xid |
oldest_multi_dbid | oid |
oldest_commit_ts_xid | xid |
newest_commit_ts_xid | xid |
checkpoint_time | timestamp with time zone |
Таблица 82. Столбцы результата pg_control_system
Имя столбца | Тип данных |
---|---|
pg_control_version | integer |
catalog_version_no | integer |
system_identifier | bigint |
pg_control_last_modified | timestamp with time zone |
Таблица 83. Столбцы результата pg_control_init
Имя столбца | Тип данных |
---|---|
max_data_alignment | integer |
database_block_size | integer |
blocks_per_segment | integer |
wal_block_size | integer |
bytes_per_wal_segment | integer |
max_identifier_length | integer |
max_index_columns | integer |
max_toast_chunk_size | integer |
large_object_chunk_size | integer |
float8_pass_by_value | boolean |
data_page_checksum_version | integer |
Таблица 84. Столбцы результата pg_control_recovery
Имя столбца | Тип данных |
---|---|
min_recovery_end_lsn | pg_lsn |
min_recovery_end_timeline | integer |
backup_start_lsn | pg_lsn |
backup_end_lsn | pg_lsn |
end_of_backup_record_required | boolean |