9.27. Функции системного администрирования #
Функции, описанные в этом разделе, используются для управления и мониторинга установки Tantor BE.
9.27.1. Функции настройки конфигурации #
Таблица 9.89 показывает функции, доступные для запроса и изменения параметров конфигурации во время выполнения.
Таблица 9.89. Функции настройки конфигурации
Функция
Описание
Пример(ы)
|
---|
current_setting ( setting_name text [, missing_ok boolean ] )
→ text
Возвращает текущее значение параметра setting_name . Если такого параметра нет, функция current_setting генерирует ошибку, если только missing_ok не указан и равен true (в этом случае возвращается NULL). Эта функция соответствует команде SQL SHOW.
current_setting('datestyle')
→ ISO, MDY
|
set_config (
setting_name text ,
new_value text ,
is_local boolean )
→ text
Устанавливает параметр setting_name в значение new_value и возвращает это значение. Если is_local равен true , новое значение будет применяться только в текущей транзакции. Если нужно, чтобы новое значение применялось в остальной части текущей сессии, используйте false . Эта функция соответствует SQL-команде SET.
set_config('log_statement_stats', 'off', false)
→ off
|
9.27.2. Функции сигнализации сервера #
Функции, показанные в Таблица 9.90, отправляют сигналы управления другим процессам сервера. Использование этих функций по умолчанию ограничено суперпользователями, но доступ может быть предоставлен другим пользователям с использованием GRANT
, с отмеченными исключениями.
Каждая из этих функций возвращает true
, если сигнал был успешно отправлен, и false
, если отправка сигнала не удалась.
Таблица 9.90. Функции сигнализации сервера
Функция
Описание
|
---|
pg_cancel_backend ( pid integer )
→ boolean
Отменяет текущий запрос сессии, процессом которого является указанный идентификатор процесса. Это также разрешено, если вызывающая роль является членом роли, бэкенд-процесс которой отменяется, или вызывающая роль имеет привилегии pg_signal_backend , однако только суперпользователи могут отменять бэкенд-процессы суперпользователей.
|
pg_log_backend_memory_contexts ( pid integer )
→ boolean
Запросы для регистрации контекстов памяти бэкенда с указанным идентификатором процесса. Эта функция может отправлять запросы процессам бэкенда и вспомогательным процессам, кроме логгера. Эти контексты памяти будут регистрироваться на уровне сообщений LOG . Они будут отображаться в журнале сервера в соответствии с настройками регистрации (см. Раздел 18.8 для получения дополнительной информации), но не будут отправляться клиенту, независимо от значения client_min_messages.
|
pg_reload_conf ()
→ boolean
Заставляет все процессы сервера Tantor BE перезагрузить свои конфигурационные файлы. (Это инициируется отправкой сигнала SIGHUP процессу postmaster, который, в свою очередь, отправляет SIGHUP каждому из своих дочерних процессов.) Вы можете использовать представления pg_file_settings , pg_hba_file_rules и pg_ident_file_mappings для проверки конфигурационных файлов на возможные ошибки перед перезагрузкой.
|
pg_rotate_logfile ()
→ boolean
Сигнализирует менеджеру журнала о переключении на новый выходной файл немедленно. Это работает только при работе встроенного сборщика журнала, так как в противном случае нет подпроцесса менеджера журнала.
|
pg_terminate_backend ( pid integer , timeout bigint DEFAULT 0 )
→ boolean
Завершает сессию, процесс backend которого имеет указанный идентификатор процесса. Это также разрешено, если вызывающая роль является членом роли, бэкенд-процесс которой завершается, или вызывающая роль имеет привилегии pg_signal_backend , однако только суперпользователи могут завершать backend суперпользователей.
Если параметр timeout не указан или равен нулю, эта функция возвращает true , независимо от того, завершился ли процесс или нет, указывая только на успешную отправку сигнала. Если параметр timeout указан (в миллисекундах) и больше нуля, функция ожидает, пока процесс фактически не завершится или пока не пройдет указанное время. Если процесс завершается, функция возвращает true . При истечении времени ожидания генерируется предупреждение и возвращается false .
|
pg_cancel_backend
и pg_terminate_backend
отправляют сигналы (SIGINT или SIGTERM
соответственно) бэкенд-процессам, идентифицированным по идентификатору процесса.
Идентификатор активного бэкенда можно найти в столбце pid
представления
pg_stat_activity
или перечислением процессов
postgres
на сервере (с использованием
ps в Unix или Task
Manager в Windows).
Роль активного бэкенда можно найти в столбце usename
представления
pg_stat_activity
.
pg_log_backend_memory_contexts
может быть использована для записи в журнал контекстов памяти бэкенд-процесса. Например:
postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid());
pg_log_backend_memory_contexts
--------------------------------
t
(1 row)
Один сообщение будет записано для каждого контекста памяти. Например:
LOG: logging memory contexts of PID 10377
STATEMENT: SELECT pg_log_backend_memory_contexts(pg_backend_pid());
LOG: level: 0; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used
LOG: level: 1; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used
LOG: level: 1; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used
LOG: level: 1; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used
LOG: level: 1; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used
LOG: level: 1; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used
LOG: level: 1; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used
LOG: level: 1; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used
...
LOG: level: 1; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used
LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used
Если под одним родительским контекстом находится более 100 дочерних контекстов, то будут зарегистрированы только первые 100 дочерних контекстов, а также будет предоставлена сводка о остальных контекстах.
Обратите внимание, что частые вызовы этой функции могут вызвать значительные перегрузки, поскольку она может генерировать большое количество сообщений журнала.
9.27.3. Функции управления резервными копиями #
Функции, показанные в Таблица 9.91, помогают в создании онлайн-резервных копий. Эти функции не могут быть выполнены во время восстановления (за исключением pg_backup_start
, pg_backup_stop
и pg_wal_lsn_diff
).
Для получения подробной информации о правильном использовании этих функций см. Раздел 24.3.
Таблица 9.91. Функции управления резервными копиями
Функция
Описание
|
---|
pg_create_restore_point ( name text )
→ pg_lsn
Создает именованную запись маркера в журнале предварительной записи, которая позже может быть использована в качестве цели восстановления, и возвращает соответствующее местоположение журнала предварительной записи. Затем заданное имя можно использовать с recovery_target_name для указания точки, до которой будет выполняться восстановление. Избегайте создания нескольких точек восстановления с одинаковым именем, поскольку восстановление остановится на первой точке, имя которой совпадает с целью восстановления.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_current_wal_flush_lsn ()
→ pg_lsn
Возвращает текущее местоположение сброса журнала предварительной записи (см. примечания ниже).
|
pg_current_wal_insert_lsn ()
→ pg_lsn
Возвращает текущее местоположение вставки журнала предварительной записи (см. примечания ниже).
|
pg_current_wal_lsn ()
→ pg_lsn
Возвращает текущее местоположение записи журнала предварительной записи (см. примечания ниже).
|
pg_backup_start (
label text
[, fast boolean
] )
→ pg_lsn
Подготавливает сервер к началу резервного копирования в режиме онлайн. Единственным обязательным параметром является произвольная пользовательская метка для резервной копии. (Обычно это будет имя, под которым будет сохранен файл резервной копии). Если второй параметр задан как true , это указывает на выполнение pg_backup_start как можно быстрее. Это приведет к немедленному выполнению контрольной точки, что вызовет всплеск операций ввода-вывода, замедляющих любые одновременно выполняющиеся запросы.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_backup_stop (
[wait_for_archive boolean
] )
→ record
( lsn pg_lsn ,
labelfile text ,
spcmapfile text )
Завершает выполнение резервного копирования в режиме онлайн. Желаемое содержимое файла метки резервной копии и файла карты табличного пространства возвращается в качестве части результата функции и должно быть записано в файлы в области резервного копирования. Эти файлы не должны быть записаны в рабочий каталог данных (это приведет к сбою PostgreSQL при попытке перезапуска после аварийного завершения).
Существует необязательный параметр типа boolean .
Если он установлен в false, функция вернет управление сразу после завершения резервного копирования, не дожидаясь архивации WAL. Это поведение полезно только с программным обеспечением резервного копирования, которое независимо отслеживает архивацию WAL. В противном случае, WAL, необходимый для обеспечения согласованности резервной копии, может отсутствовать и сделать резервную копию бесполезной. По умолчанию или когда этот параметр установлен в true, pg_backup_stop будет ожидать архивации WAL, если архивация включена. (На реплике это означает, что она будет ожидать только при условии, что archive_mode = always . Если активность записи на основном сервере низкая, может быть полезно запустить pg_switch_wal на основном сервере, чтобы немедленно переключить сегмент).
Когда выполняется на основном сервере, эта функция также создает резервную копию
исторического файла в области архива журнала предварительной записи. Исторический файл
включает метку, заданную для pg_backup_start ,
начальную и конечную позиции журнала предварительной записи для резервной копии,
а также начальное и конечное время резервного копирования. После записи конечной
позиции текущая точка вставки журнала предварительной записи автоматически
перемещается на следующий файл журнала предварительной записи, чтобы конечный
файл журнала предварительной записи мог быть немедленно заархивирован для завершения
резервного копирования.
Результатом функции является одна запись.
Столбец lsn содержит конечную позицию журнала предварительной записи (которую можно игнорировать). Второй столбец возвращает содержимое файла метки резервной копии, а третий столбец возвращает содержимое файла карты табличного пространства. Они должны быть сохранены вместе с резервной копией и требуются для процесса восстановления.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_switch_wal ()
→ pg_lsn
Принудительно переводит сервер на новый файл журнала предварительной записи, что позволяет архивировать текущий файл (если вы используете непрерывную архивацию). Результатом является конечное положение файла журнала предварительной записи плюс 1 внутри только что завершенного файла журнала предварительной записи. Если с момента последнего переключения файлов журнала предварительной записи не было никакой активности, pg_switch_wal ничего не делает и возвращает начальное положение файла журнала предварительной записи, который в настоящее время используется.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_walfile_name ( lsn pg_lsn )
→ text
Преобразует местоположение журнала предварительной записи в имя файла журнала предзаписи, содержащего это местоположение.
|
pg_walfile_name_offset ( lsn pg_lsn )
→ record
( file_name text ,
file_offset integer )
Преобразует местоположение журнала предварительной записи в имя файла журнала предзаписи и смещение в байтах внутри этого файла.
|
pg_split_walfile_name ( file_name text )
→ record
( segment_number numeric ,
timeline_id bigint )
Извлекает номер последовательности и идентификатор временной шкалы из имени файла WAL.
|
pg_wal_lsn_diff ( lsn1 pg_lsn , lsn2 pg_lsn )
→ numeric
Вычисляет разницу в байтах (lsn1 - lsn2 ) между двумя местоположениями журнала предварительной записи. Это может быть использовано с pg_stat_replication или некоторыми из функций, показанных в Таблица 9.91, чтобы получить задержку репликации.
|
pg_current_wal_lsn
отображает текущее местоположение записи журнала предварительной записи в том же формате, что и вышеуказанные функции.
Аналогично, pg_current_wal_insert_lsn
отображает текущее местоположение вставки журнала предварительной записи, а pg_current_wal_flush_lsn
отображает текущее местоположение сброса журнала предварительной записи. Местоположение вставки - это "логический" конец журнала предварительной записи в любой момент времени, в то время как местоположение записи - это конец того, что было фактически записано из внутренних буферов сервера, а местоположение сброса - последнее известное местоположение, записанное на надежное хранилище. Местоположение записи - это конец того, что можно изучить извне сервера и обычно это то, что вам нужно, если вас интересует архивирование частично завершенных файлов журнала предварительной записи. Местоположения вставки и сброса предназначены в основном для целей отладки сервера. Все эти операции только для чтения и не требуют привилегий суперпользователя.
Вы можете использовать функцию pg_walfile_name_offset
для извлечения соответствующего имени файла журнала предварительной записи и смещения в байтах из значения pg_lsn
. Например:
postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn);
file_name | file_offset
--------------------------+-------------
00000001000000000000000D | 4039624
(1 row)
Аналогично, pg_walfile_name
извлекает только имя файла журнала предварительной записи.
Когда указанное местоположение файла журнала предварительной записи точно находится на границе файла журнала предварительной записи, обе эти функции возвращают имя предшествующего файла журнала предварительной записи.
Это обычно желаемое поведение для управления архивированием файлов журнала предварительной записи, поскольку предшествующий файл является последним, который в настоящее время требуется архивировать.
pg_split_walfile_name
полезна для вычисления
LSN из смещения файла и имени файла WAL, например:
postgres=# \set file_name '000000010000000100C000AB'
postgres=# \set offset 256
postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset AS lsn
FROM pg_split_walfile_name(:'file_name') pd,
pg_show_all_settings() ps
WHERE ps.name = 'wal_segment_size';
lsn
---------------
C001/AB000100
(1 row)
9.27.4. Функции управления восстановлением #
Функции, показанные в Таблица 9.92, предоставляют информацию о текущем состоянии резервного сервера.
Эти функции могут выполняться как во время восстановления, так и в обычном режиме работы.
Таблица 9.92. Функции информации о восстановлении
Функция
Описание
|
---|
pg_is_in_recovery ()
→ boolean
Возвращает true, если восстановление все еще выполняется.
|
pg_last_wal_receive_lsn ()
→ pg_lsn
Возвращает последнее местоположение журнала предварительной записи, которое было получено и синхронизировано с диском с помощью потоковой репликации. Во время выполнения потоковой репликации это значение будет монотонно увеличиваться. Если восстановление завершено, то оно останется статическим на местоположении последней записи журнала предварительной записи, полученной и синхронизированной с диском во время восстановления. Если потоковая репликация отключена или еще не запущена, функция возвращает NULL .
|
pg_last_wal_replay_lsn ()
→ pg_lsn
Возвращает последнее местоположение журнала предварительной записи, которое было воспроизведено во время восстановления. Если восстановление все еще выполняется, это значение будет увеличиваться монотонно. Если восстановление завершено, оно останется статическим на месте последней записи WAL, примененной во время восстановления. Когда сервер был запущен нормально без восстановления, функция возвращает значение NULL ..
|
pg_last_xact_replay_timestamp ()
→ timestamp with time zone
Возвращает временную метку последней транзакции, воспроизведенной во время восстановления. Это время, когда запись WAL для коммита или отката этой транзакции была создана на основном сервере. Если во время восстановления не было воспроизведено ни одной транзакции, функция возвращает NULL . В противном случае, если восстановление все еще выполняется, это значение будет монотонно увеличиваться. Если восстановление завершено, оно останется статическим на момент последней примененной транзакции во время восстановления. Когда сервер был запущен нормально без восстановления, функция возвращает NULL .
|
pg_get_wal_resource_managers ()
→ setof record
( rm_id integer ,
rm_name text ,
rm_builtin boolean )
Возвращает текущие загруженные менеджеры ресурсов WAL в системе. Колонка rm_builtin указывает, является ли он встроенным менеджером ресурсов или пользовательским менеджером ресурсов, загруженным расширением.
|
Функции, показанные в Таблица 9.93, управляют ходом восстановления. Эти функции могут быть выполнены только во время восстановления.
Таблица 9.93. Функции управления восстановлением
Функция
Описание
|
---|
pg_is_wal_replay_paused ()
→ boolean
Возвращает true, если запрошена приостановка восстановления.
|
pg_get_wal_replay_pause_state ()
→ text
Возвращает состояние паузы восстановления. Возвращаемые значения - not paused , если пауза не запрошена, pause requested , если пауза запрошена, но восстановление еще не приостановлено, и paused , если восстановление действительно приостановлено.
|
pg_promote ( wait boolean DEFAULT true , wait_seconds integer DEFAULT 60 )
→ boolean
Продвигает резервный сервер до статуса основного.
Если параметр wait установлен в true (по умолчанию), функция ожидает завершения продвижения или проходит wait_seconds секунд и возвращает true , если продвижение прошло успешно, и false в противном случае.
Если параметр wait установлен в false , функция немедленно возвращает true после отправки сигнала SIGUSR1 постмастеру для запуска продвижения.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_wal_replay_pause ()
→ void
Запрос на приостановку восстановления. Запрос не означает, что восстановление
немедленно останавливается. Если нужно гарантировать, что восстановление действительно приостановлено,
необходимо проверить состояние приостановки восстановления, возвращаемое функцией
pg_get_wal_replay_pause_state() . Обратите внимание, что
pg_is_wal_replay_paused() возвращает, был ли сделан запрос.
Во время приостановки восстановления не применяются никакие дальнейшие изменения базы данных.
Если активен горячий резервный экземпляр, все новые запросы будут видеть одинаковую согласованную
снимок базы данных, и не будет генерироваться дальнейших конфликтов запросов
до возобновления восстановления.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_wal_replay_resume ()
→ void
Перезапускает восстановление, если оно было приостановлено.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_wal_replay_pause
и
pg_wal_replay_resume
не могут быть выполнены, пока
продолжается процесс продвижения. Если продвижение запускается во время приостановки восстановления, то приостановленное состояние завершается и продвижение продолжается.
Если потоковая репликация отключена, приостановленное состояние может продолжаться бесконечно без проблем. Если потоковая репликация выполняется, то записи WAL будут продолжать поступать, что в конечном итоге заполнит доступное дисковое пространство, в зависимости от продолжительности паузы, скорости генерации WAL и доступного дискового пространства.
9.27.5. Функции синхронизации снимков #
Tantor BE позволяет сессиям базы данных синхронизировать свои образы. Образ определяет, какие данные видны транзакции, использующей образ. Синхронизированные образы необходимы, когда две или более сессии должны видеть идентичное содержимое в базе данных. Если две сессии просто запускают свои транзакции независимо, всегда есть возможность, что некая третья транзакция коммитится между выполнением двух команд START TRANSACTION
, так что одна сессия видит эффекты этой транзакции, а другой - нет.
Чтобы решить эту проблему, Tantor BE позволяет транзакции
экспортировать используемый ею образ. Пока экспортирующая
транзакция остается открытой, другие транзакции могут импортировать ее
образ и таким образом гарантировать, что они видят точно такое же представление
базы данных, как и первая транзакция. Однако следует отметить, что любые
изменения базы данных, сделанные любой из этих транзакций, остаются невидимыми
для других транзакций, как это обычно бывает для изменений, сделанных незафиксированными
транзакциями. Таким образом, транзакции синхронизированы относительно
предварительно существующих данных, но действуют нормально для изменений, которые они сами вносят.
Все снимки экспортируются с помощью функции pg_export_snapshot
,
показанной в разделе Таблица 9.94,
и импортируются с помощью команды SET TRANSACTION.
Таблица 9.94. Функции синхронизации снимков
Функция
Описание
|
---|
pg_export_snapshot ()
→ text
Сохраняет текущий снимок транзакции и возвращает строку text , идентифицирующую снимок. Эту строку необходимо передать (вне базы данных) клиентам, которые хотят импортировать снимок. Снимок доступен для импорта только до конца транзакции, которая его экспортировала.
Транзакция может экспортировать более одного снимка, если это необходимо. Обратите внимание, что это полезно только в транзакциях с уровнем изоляции READ COMMITTED , поскольку в уровнях изоляции REPEATABLE READ и выше транзакции используют один и тот же снимок на протяжении всего их существования. После того, как транзакция экспортировала любые снимки, ее нельзя подготовить с помощью PREPARE TRANSACTION.
|
pg_log_standby_snapshot ()
→ pg_lsn
Сделать снимок выполняющихся транзакций и записать его в WAL, не дожидаясь, пока bgwriter или checkpointer запишут его. Это полезно для логического декодирования на резервном сервере, так как создание логического слота должно ждать, пока такой запись не будет воспроизведена на резервном сервере.
|
9.27.6. Функции управления репликацией #
Функции, показанные в Таблица 9.95, предназначены для управления и взаимодействия с функциями репликации. См. Раздел 25.2.5, Раздел 25.2.6 и Глава 47 для получения информации о базовых функциях. Использование функций для репликации источника по умолчанию разрешено только суперпользователю, но может быть разрешено другим пользователям с помощью команды GRANT
. Использование функций для слотов репликации ограничено суперпользователями и пользователями, имеющими привилегию REPLICATION
.
Многие из этих функций имеют эквивалентные команды в протоколе репликации; см. Раздел 52.4.
Все функции, описанные в Раздел 9.27.3,
Раздел 9.27.4 и
Раздел 9.27.5
также актуальны для репликации.
Таблица 9.95. Функции управления репликацией
Функция
Описание
|
---|
pg_create_physical_replication_slot ( slot_name name [, immediately_reserve boolean , temporary boolean ] )
→ record
( slot_name name ,
lsn pg_lsn )
Создает новый физический слот репликации с именем slot_name . Второй необязательный параметр, когда true , указывает, что LSN для этого слота репликации будет зарезервирован немедленно; в противном случае LSN резервируется при первом подключении от клиента потоковой репликации. Потоковая передача изменений из физического слота возможна только с использованием протокола потоковой репликации — см. Раздел 52.4. Третий необязательный параметр, temporary , когда установлен в true, указывает, что слот не должен быть постоянно сохранен на диске и предназначен только для использования текущей сессией. Временные слоты также освобождаются при возникновении ошибки. Эта функция соответствует команде протокола репликации CREATE_REPLICATION_SLOT ... PHYSICAL .
|
pg_drop_replication_slot ( slot_name name )
→ void
Удаляет физический или логический слот репликации с именем slot_name . То же самое, что и команда протокола репликации DROP_REPLICATION_SLOT . Для логических слотов это должно быть вызвано при подключении к той же базе данных, на которой был создан слот.
|
pg_create_logical_replication_slot ( slot_name name , plugin name [, temporary boolean , twophase boolean ] )
→ record
( slot_name name ,
lsn pg_lsn )
Создает новый логический (декодирующий) слот репликации с именем slot_name с использованием плагина вывода plugin . Необязательный третий параметр, temporary , когда установлен в значение true, указывает, что слот не должен храниться на диске постоянно и предназначен только для использования текущей сессией. Временные слоты также освобождаются при возникновении ошибки. Необязательный четвертый параметр, twophase , когда установлен в значение true, указывает, что декодирование подготовленных транзакций включено для этого слота. Вызов этой функции имеет тот же эффект, что и команда протокола репликации CREATE_REPLICATION_SLOT ... LOGICAL .
|
pg_copy_physical_replication_slot ( src_slot_name name , dst_slot_name name [, temporary boolean ] )
→ record
( slot_name name ,
lsn pg_lsn )
Скопируйте существующий физический слот репликации с именем src_slot_name в физический слот репликации с именем dst_slot_name .
Скопированный физический слот начинает резервировать WAL с того же LSN, что и исходный слот.
temporary является необязательным. Если temporary не указан, используется то же значение, что и у исходного слота.
|
pg_copy_logical_replication_slot ( src_slot_name name , dst_slot_name name [, temporary boolean [, plugin name ]] )
→ record
( slot_name name ,
lsn pg_lsn )
Копирует существующий логический слот репликации с именем src_slot_name в логический слот репликации с именем dst_slot_name , при необходимости изменяя выходной плагин и постоянство. Скопированный логический слот начинается с того же LSN, что и исходный логический слот. Оба параметра temporary и plugin являются необязательными; если они не указаны, используются значения исходного слота.
|
pg_logical_slot_get_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data text )
Возвращает изменения в слоте slot_name , начиная с точки, с которой изменения были последний раз потреблены. Если upto_lsn и upto_nchanges равны NULL, логическое декодирование будет продолжаться до конца WAL. Если upto_lsn не равно NULL, декодирование будет включать только те транзакции, которые коммитятся до указанного LSN. Если upto_nchanges не равно NULL, декодирование будет остановлено, когда количество строк, произведенных декодированием, превысит указанное значение. Однако следует отметить, что фактическое количество возвращаемых строк может быть больше, так как это ограничение проверяется только после добавления строк, произведенных при декодировании каждого нового коммита транзакции.
|
pg_logical_slot_peek_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data text )
Работает так же, как функция pg_logical_slot_get_changes() , за исключением того, что изменения не потребляются; то есть они будут возвращены снова при последующих вызовах.
|
pg_logical_slot_get_binary_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data bytea )
Поведение этой функции аналогично функции pg_logical_slot_get_changes() , за исключением того, что изменения возвращаются в виде bytea .
|
pg_logical_slot_peek_binary_changes ( slot_name name , upto_lsn pg_lsn , upto_nchanges integer , VARIADIC options text[] )
→ setof record
( lsn pg_lsn ,
xid xid ,
data bytea )
Работает так же, как функция pg_logical_slot_peek_changes() , за исключением того, что изменения возвращаются в виде bytea .
|
pg_replication_slot_advance ( slot_name name , upto_lsn pg_lsn )
→ record
( slot_name name ,
end_lsn pg_lsn )
Продвигает текущую подтвержденную позицию слота репликации с именем slot_name . Слот не будет перемещаться назад и не будет перемещаться за текущую позицию вставки. Возвращает имя слота и фактическую позицию, на которую он был продвинут. Обновленная информация о позиции слота будет записана при следующей контрольной точке, если было выполнено продвижение. Поэтому в случае сбоя слот может вернуться к более ранней позиции.
|
pg_replication_origin_create ( node_name text )
→ oid
Создает источник репликации с заданным внешним именем и возвращает ему присвоенный внутренний идентификатор.
|
pg_replication_origin_drop ( node_name text )
→ void
Удаляет ранее созданный источник репликации, включая все связанные данные о воспроизведении.
|
pg_replication_origin_oid ( node_name text )
→ oid
Находит репликационный источник по имени и возвращает внутренний идентификатор. Если такой репликационный источник не найден, возвращается значение NULL .
|
pg_replication_origin_session_setup ( node_name text )
→ void
Отмечает текущую сессию как воспроизводящуюся из указанного
источника, позволяя отслеживать прогресс воспроизведения.
Может использоваться только в случае, если не выбран никакой источник.
Используйте pg_replication_origin_session_reset для отмены.
|
pg_replication_origin_session_reset ()
→ void
Отменяет эффекты pg_replication_origin_session_setup() .
|
pg_replication_origin_session_is_setup ()
→ boolean
Возвращает true, если в текущей сессии был выбран источник репликации.
|
pg_replication_origin_session_progress ( flush boolean )
→ pg_lsn
Возвращает местоположение воспроизведения для выбранного источника репликации в текущей сессии. Параметр flush определяет, будет ли соответствующая локальная транзакция гарантированно записана на диск или нет.
|
pg_replication_origin_xact_setup ( origin_lsn pg_lsn , origin_timestamp timestamp with time zone )
→ void
Отмечает текущую транзакцию как повторение транзакции, которая была подтверждена на указанном LSN и временной метке. Может быть вызвана только после выбора источника репликации с помощью pg_replication_origin_session_setup .
|
pg_replication_origin_xact_reset ()
→ void
Cancels the effects of
pg_replication_origin_xact_setup() .
|
pg_replication_origin_advance ( node_name text , lsn pg_lsn )
→ void
Устанавливает прогресс репликации для указанного узла на указанную
позицию. Это особенно полезно для установки начальной
позиции или установки новой позиции после изменений конфигурации и
подобных. Будьте осторожны, небрежное использование этой функции может привести к
несогласованности реплицированных данных.
|
pg_replication_origin_progress ( node_name text , flush boolean )
→ pg_lsn
Возвращает местоположение воспроизведения для указанного источника репликации. Параметр flush определяет, будет ли соответствующая локальная транзакция гарантированно записана на диск или нет.
|
pg_logical_emit_message ( transactional boolean , prefix text , content text )
→ pg_lsn
pg_logical_emit_message ( transactional boolean , prefix text , content bytea )
→ pg_lsn
Отправляет сообщение логическому декодеру. Это может использоваться для передачи общих сообщений плагинам логического декодирования через WAL. Параметр transactional указывает, должно ли сообщение быть частью текущей транзакции или оно должно быть записано немедленно и декодировано, как только логический декодер прочитает запись. Параметр prefix является текстовым префиксом, который может использоваться плагинами логического декодирования для удобного распознавания интересующих их сообщений. Параметр content представляет собой содержимое сообщения, представленное в текстовой или двоичной форме.
|
9.27.7. Функции управления объектами базы данных #
Функции, показанные в Таблица 9.96, вычисляют использование дискового пространства объектов базы данных или помогают в представлении или понимании результатов использования. Результаты типа bigint
измеряются в байтах. Если в одну из этих функций передается OID, который не представляет существующий объект, возвращается значение NULL
.
Таблица 9.96. Функции размера объекта базы данных
Функция
Описание
|
---|
pg_column_size ( "any" )
→ integer
Показывает количество байт, используемых для хранения каждого отдельного значения данных. Если применяется непосредственно к значению столбца таблицы, это отражает любое сжатие, которое было выполнено.
|
pg_column_compression ( "any" )
→ text
Показывает алгоритм сжатия, который был использован для сжатия
индивидуального значения переменной длины. Возвращает NULL ,
если значение не сжато.
|
pg_database_size ( name )
→ bigint
pg_database_size ( oid )
→ bigint
Вычисляет общий объем дискового пространства, используемого базой данных с указанным именем или OID. Чтобы использовать эту функцию, вы должны иметь привилегию CONNECT для указанной базы данных (которая предоставляется по умолчанию) или иметь привилегии роли pg_read_all_stats .
|
pg_indexes_size ( regclass )
→ bigint
Вычисляет общий объем дискового пространства, занимаемого индексами, присоединенными к указанной таблице.
|
pg_relation_size ( relation regclass [, fork text ] )
→ bigint
Вычисляет объем дискового пространства, занимаемого одним “форком” указанного отношения. (Обратите внимание, что для большинства целей удобнее использовать более высокоуровневые функции pg_total_relation_size или pg_table_size , которые суммируют размеры всех форков). С одним аргументом возвращает размер основного форка данных таблицы. Второй аргумент может быть указан для определения форка, которую следует исследовать:
main возвращает размер основной
данных форка таблицы.
fsm возвращает размер карты свободного пространства
(см. Раздел 70.3) связанной с отношением.
vm возвращает размер карты видимости (см. Раздел 70.4) связанной с отношением.
init возвращает размер форка инициализации,
если она есть, связанной с отношением.
|
pg_size_bytes ( text )
→ bigint
Преобразует размер в человеко-читаемом формате (как возвращает
pg_size_pretty ) в байты. Допустимые единицы:
bytes , B , kB ,
MB , GB , TB ,
и PB .
|
pg_size_pretty ( bigint )
→ text
pg_size_pretty ( numeric )
→ text
Преобразует размер в байтах в более удобночитаемый формат с
единицами измерения размера (байты, кБ, МБ, ГБ, ТБ или ПБ, где это уместно). Обратите внимание, что
единицы измерения являются степенями 2, а не степенями 10, поэтому 1кБ равно 1024 байтам,
1МБ равно 10242 = 1048576 байтам, и так далее.
|
pg_table_size ( regclass )
→ bigint
Вычисляет объем дискового пространства, занимаемого указанной таблицей, за исключением индексов (но включая ее TOAST-таблицу, если таковая имеется, карту свободного пространства и карту видимости).
|
pg_tablespace_size ( name )
→ bigint
pg_tablespace_size ( oid )
→ bigint
Вычисляет общий объем дискового пространства, используемого в таблице с указанным именем или OID. Для использования этой функции вы должны иметь привилегию CREATE на указанное таблицей пространство или иметь привилегии роли pg_read_all_stats , если это не является таблицей по умолчанию для текущей базы данных.
|
pg_total_relation_size ( regclass )
→ bigint
Вычисляет общий объем дискового пространства, занимаемого указанной таблицей, включая все индексы и данные TOAST. Результат эквивалентен pg_table_size + pg_indexes_size .
|
Функции, работающие с таблицами или индексами, принимают аргумент regclass
, который представляет собой просто OID таблицы или индекса в системном каталоге pg_class
. Однако вам не нужно искать OID вручную, поскольку конвертер входных данных типа regclass
выполнит эту работу за вас. Подробности см. в разделе Раздел 8.19.
Функции, показанные в Таблица 9.97, помогают
в определении конкретных дисковых файлов, связанных с объектами базы данных.
Таблица 9.97. Функции местоположения объекта базы данных
Функция
Описание
|
---|
pg_relation_filenode ( relation regclass )
→ oid
Возвращает номер “filenode”, в настоящее время назначенный указанному отношению. Файловый узел (filenode) является основной компонентой имени файла(-ов), используемого для отношения (см. Раздел 70.1 для получения дополнительной информации). Для большинства отношений результат такой же, как и pg_class .relfilenode , но для некоторых системных каталогов relfilenode равен нулю, и для получения правильного значения необходимо использовать эту функцию. Если передать отношение, не имеющее хранилища, такое как представление, функция вернет NULL.
|
pg_relation_filepath ( relation regclass )
→ text
Возвращает полное имя пути к файлу (относительно каталога данных кластера базы данных, PGDATA ) отношения.
|
pg_filenode_relation ( tablespace oid , filenode oid )
→ regclass
Возвращает OID отношения, заданный OID табличного пространства имен и filenode, под которым оно хранится. Это в основном обратное отображение функции pg_relation_filepath . Для отношения в табличном пространстве имен по умолчанию базы данных, пространство имен может быть указано как ноль. Возвращает NULL , если ни одно отношение в текущей базе данных не связано с заданными значениями.
|
Таблица 9.98 перечисляет функции, используемые для управления
правилами сортировки.
Таблица 9.98. Функции управления правилом сортировки
Функция
Описание
|
---|
pg_collation_actual_version ( oid )
→ text
Возвращает фактическую версию объекта правила сортировки, установленную в операционной системе в данный момент. Если она отличается от значения в поле collversion объекта pg_collation , то объекты, зависящие от правила сортировки, могут потребовать пересборки. См. также ALTER COLLATION.
|
pg_database_collation_actual_version ( oid )
→ text
Возвращает фактическую версию правила сортировки базы данных, установленную в операционной системе в настоящее время. Если она отличается от значения в pg_database .datcollversion , то объекты, зависящие от правила сортировки, могут потребовать перестройки. См. также ALTER DATABASE.
|
pg_import_system_collations ( schema regnamespace )
→ integer
Добавляет правила сортировки в системный каталог pg_collation на основе всех локалей, найденных в операционной системе. Это то, что использует initdb ; см. Раздел 22.2.2 для получения дополнительной информации. Если позже в операционной системе будут установлены дополнительные локали, эту функцию можно запустить снова, чтобы добавить правила сортировки для новых локалей. Локали, совпадающие с существующими записями в pg_collation , будут прне указаны. (Однако объекты правила сортировки на основе локалей, которые больше не присутствуют в операционной системе, не удаляются этой функцией). Параметр schema обычно будет pg_catalog , но это не является обязательным; правила сортировки также могут быть установлены в другую схему. Функция возвращает количество созданных новых объектов правила сортировки. Использование этой функции ограничено суперпользователями.
|
Таблица 9.99 перечисляет функции, которые предоставляют информацию о структуре секционированных таблиц.
Таблица 9.99. Функции информации о секционировании
Функция
Описание
|
---|
pg_partition_tree ( regclass )
→ setof record
( relid regclass ,
parentrelid regclass ,
isleaf boolean ,
level integer )
Перечисляет таблицы или индексы в дереве секций заданной секционированной таблицы или секционированного индекса, с одной строкой для каждой секции. Предоставляемая информация включает OID секции, OID ее непосредственного родителя, логическое значение, указывающее, является ли секция листом, и целое число, указывающее ее уровень в иерархии. Значение уровня равно 0 для входной таблицы или индекса, 1 для ее непосредственных дочерних секций, 2 для их секций и так далее. Возвращает ноль строк, если отношение не существует или не является секцией или секционированной таблицей.
|
pg_partition_ancestors ( regclass )
→ setof regclass
Перечисляет родственные отношения данной секции, включая само отношение. Возвращает ноль строк, если отношение не существует или не является секцией или секционированной таблицей.
|
pg_partition_root ( regclass )
→ regclass
Возвращает верхний родительский узел дерева секций, к которому относится заданное отношение. Возвращает NULL , если отношение не существует или не является секцией или секционированной таблицей.
|
Например, чтобы проверить общий размер данных, содержащихся в
секционированной таблице measurement
, можно использовать
следующий запрос:
SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size
FROM pg_partition_tree('measurement');
9.27.8. Функции обслуживания индексов #
Таблица 9.100 показывает функции, доступные для задач по обслуживанию индексов. (Обратите внимание, что эти задачи по обслуживанию обычно выполняются автоматически с помощью автоочистки; использование этих функций требуется только в особых случаях).
Эти функции не могут быть выполнены во время восстановления.
Использование этих функций ограничено суперпользователями и владельцем данного индекса.
Таблица 9.100. Функции обслуживания индексов
Функция
Описание
|
---|
brin_summarize_new_values ( index regclass )
→ integer
Сканирует указанный индекс BRIN для поиска диапазонов страниц в базовой таблице, которые в настоящее время не сводятся к индексу; для любого такого диапазона создается новый кортеж сводного индекса путем сканирования этих страниц таблицы. Возвращает количество новых сводных диапазонов страниц, которые были вставлены в индекс.
|
brin_summarize_range ( index regclass , blockNumber bigint )
→ integer
Суммирует диапазон страниц, охватывающих данный блок, если он еще не был
суммирован. Это
аналогично функции brin_summarize_new_values , за исключением того, что
обрабатывается только диапазон страниц, охватывающий указанный номер блока таблицы.
|
brin_desummarize_range ( index regclass , blockNumber bigint )
→ void
Удаляет кортеж индекса BRIN, который содержит сводку диапазона страниц, охватывающего указанный блок таблицы, если таковой имеется.
|
gin_clean_pending_list ( index regclass )
→ bigint
Очищает список “ожидающих” записей указанного индекса GIN,
перемещая их массово в основную структуру данных GIN.
Возвращает количество удаленных страниц из списка ожидания.
Если аргументом является индекс GIN, построенный с отключенной опцией
fastupdate , очистка не выполняется и результат равен нулю,
поскольку у индекса нет списка ожидания.
См. Раздел 67.4.1 и Раздел 67.5
для получения подробной информации о списке ожидания и опции fastupdate .
|
9.27.9. Общие функции доступа к файлам #
Функции, показанные в Таблица 9.101, обеспечивают нативный доступ к файлам на машине, на которой размещен сервер. Можно получить доступ только к файлам в каталоге кластера базы данных и каталоге log_directory
, если пользователь является суперпользователем или ему предоставлена роль pg_read_server_files
. Используйте относительный путь для файлов в каталоге кластера и путь, соответствующий настройке конфигурации log_directory
для файлов журнала.
Обратите внимание, что предоставление пользователям привилегии EXECUTE на функцию pg_read_file()
или связанные функции позволяет им читать любой файл на сервере, который может прочитать процесс сервера базы данных; эти функции обходят все проверки привилегий в базе данных. Это означает, что, например, пользователь с таким доступом может прочитать содержимое таблицы pg_authid
, где хранится информация аутентификации, а также прочитать любые данные таблиц в базе данных. Поэтому предоставление доступа к этим функциям должно быть тщательно обдумано.
При предоставлении привилегий на эти функции, обратите внимание, что записи таблицы,
показывающие необязательные параметры, в основном реализованы как несколько физических
функций с разными списками параметров. Привилегии должны быть предоставлены
отдельно для каждой такой функции, если она должна быть
использована. Команда psql \df
может быть полезна для проверки фактических сигнатур функций.
Некоторые из этих функций принимают необязательный параметр missing_ok
,
который определяет поведение, когда файл или каталог не существует. Если значение true
, функция
возвращает NULL
или пустой набор результатов, в зависимости от ситуации.
Если значение false
, возникает ошибка. (Условия сбоя,
отличные от “файл не найден”, в любом случае сообщаются как ошибки.) Значение по умолчанию — false
.
Таблица 9.101. Общие функции доступа к файлам
Функция
Описание
|
---|
pg_ls_dir ( dirname text [, missing_ok boolean , include_dot_dirs boolean ] )
→ setof text
Возвращает имена всех файлов (и каталогов и других специальных файлов) в указанном каталоге. Параметр include_dot_dirs указывает, должны ли “.” и “..” быть включены в набор результатов; по умолчанию они исключаются. Включение их может быть полезно, когда missing_ok равно true , чтобы отличить пустой каталог от несуществующего каталога.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_logdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла в каталоге журнала сервера. Имена файлов, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и ролей с привилегиями роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_waldir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла в каталоге журнала предварительной записи операций (WAL) сервера. Имена файлов, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и ролей с привилегиями роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_logicalmapdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла в каталог pg_logical/mappings сервера. Имена файлов, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и членов роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_logicalsnapdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла в каталоге pg_logical/snapshots сервера. Имена файлов, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и членов роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_replslotdir ( slot_name text )
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла в каталоге сервера pg_replslot/slot_name , где slot_name - это имя репликационного слота, указанное в качестве входного параметра функции. Имена файлов, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и членов роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_archive_statusdir ()
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла в каталоге состояния архива WAL сервера (pg_wal/archive_status ). Имена файлов, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и членов роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_ls_tmpdir ( [ tablespace oid ] )
→ setof record
( name text ,
size bigint ,
modification timestamp with time zone )
Возвращает имя, размер и время последнего изменения (mtime) каждого обычного файла во временном каталоге файлов для указанного tablespace . Если tablespace не указано, будет произведен поиск в пространстве pg_default . Файлы, начинающиеся с точки, каталоги и другие специальные файлы исключаются.
Эта функция ограничена для суперпользователей и членов роли pg_monitor по умолчанию, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_read_file ( filename text [, offset bigint , length bigint ] [, missing_ok boolean ] )
→ text
Возвращает весь или часть текстового файла, начиная с заданного байта offset , возвращая не более length байт (меньше, если достигнут конец файла). Если offset отрицательный, он отсчитывается от конца файла. Если offset и length не указаны, возвращается весь файл. Байты, считанные из файла, интерпретируются как строка в кодировке базы данных; если они не являются допустимыми в этой кодировке, генерируется ошибка.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
pg_read_binary_file ( filename text [, offset bigint , length bigint ] [, missing_ok boolean ] )
→ bytea
Возвращает весь файл или его часть. Эта функция идентична функции pg_read_file , за исключением того, что она может читать произвольные двоичные данные и возвращать результат в виде bytea , а не text ; соответственно, проверки кодировки не выполняются.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
В сочетании с функцией convert_from эта функция может использоваться для чтения текстового файла в указанной кодировке и преобразования его в кодировку базы данных:
SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');
|
pg_stat_file ( filename text [, missing_ok boolean ] )
→ record
( size bigint ,
access timestamp with time zone ,
modification timestamp with time zone ,
change timestamp with time zone ,
creation timestamp with time zone ,
isdir boolean )
Возвращает запись, содержащую размер файла, временную метку последнего доступа,
временную метку последней модификации, временную метку последнего изменения статуса файла (только для платформ Unix),
временную метку создания файла (только для Windows) и флаг, указывающий, является ли он каталогом.
Эта функция по умолчанию доступна только для суперпользователей, но другим пользователям может быть предоставлено право EXECUTE для выполнения функции.
|
9.27.10. Функции рекомендательной блокировки #
Все функции, показанные в Таблица 9.102,
управляют рекомендательными блокировками. Для получения подробной информации о правильном использовании этих функций,
см. Раздел 13.3.5.
Все эти функции предназначены для блокировки ресурсов, определенных приложением, которые могут быть идентифицированы либо одним значением ключа 64 бита, либо двумя значениями ключа 32 бита (обратите внимание, что эти два пространства ключей не перекрываются). Если другая сессия уже удерживает конфликтующую блокировку на том же идентификаторе ресурса, функции будут либо ждать, пока ресурс станет доступным, либо вернуть false
, в зависимости от функции.
Блокировки могут быть либо общими, либо исключительными: общая блокировка не конфликтует с другими общими блокировками на том же ресурсе, только с исключительными блокировками.
Блокировки могут быть взяты на уровне сессии (так что они удерживаются до освобождения или завершения сессии) или на уровне транзакции (так что они удерживаются до завершения текущей транзакции; нет возможности для ручного освобождения).
Несколько запросов на блокировку на уровне сессии стекируются, так что если тот же идентификатор ресурса заблокирован три раза, то должно быть три запроса на разблокировку для освобождения ресурса перед завершением сессии.
Таблица 9.102. Функции рекомендательной блокировки
Функция
Описание
|
---|
pg_advisory_lock ( key bigint )
→ void
pg_advisory_lock ( key1 integer , key2 integer )
→ void
Получает эксклюзивную рекомендательную блокировку на уровне сессии, ожидая при необходимости.
|
pg_advisory_lock_shared ( key bigint )
→ void
pg_advisory_lock_shared ( key1 integer , key2 integer )
→ void
Получает разделяемую рекомендательную блокировку на уровне сессии, если необходимо.
|
pg_advisory_unlock ( key bigint )
→ boolean
pg_advisory_unlock ( key1 integer , key2 integer )
→ boolean
Снимает ранее полученную эксклюзивную рекомендательную блокировку на уровне сессии.
Возвращает true , если блокировка успешно снята.
Если блокировка не была наложена, то возвращается false , и дополнительно
сервер выдаст предупреждение SQL.
|
pg_advisory_unlock_all ()
→ void
Освобождает все рекомендательные блокировки сессий, удерживаемые текущей сессией.
(Эта функция неявно вызывается при завершении сессии, даже если клиент отключается некорректно).
|
pg_advisory_unlock_shared ( key bigint )
→ boolean
pg_advisory_unlock_shared ( key1 integer , key2 integer )
→ boolean
Отменяет ранее полученную разделяемую рекомендательную блокировку на уровне сессии.
Возвращает true , если блокировка успешно освобождена.
Если блокировка не была удержана, возвращается false , и, кроме того, сервер сообщит об SQL-предупреждении.
|
pg_advisory_xact_lock ( key bigint )
→ void
pg_advisory_xact_lock ( key1 integer , key2 integer )
→ void
Получает эксклюзивную рекомендательную блокировку на уровне транзакции, ожидая при необходимости.
|
pg_advisory_xact_lock_shared ( key bigint )
→ void
pg_advisory_xact_lock_shared ( key1 integer , key2 integer )
→ void
Получает разделяемую рекомендательную блокировку на уровне транзакции, ожидая при необходимости.
|
pg_try_advisory_lock ( key bigint )
→ boolean
pg_try_advisory_lock ( key1 integer , key2 integer )
→ boolean
Получает эксклюзивную рекомендательную блокировку на уровне сессии, если она доступна.
Это либо немедленно получает блокировку и возвращает true , либо возвращает false без ожидания, если блокировка не может быть немедленно получена.
|
pg_try_advisory_lock_shared ( key bigint )
→ boolean
pg_try_advisory_lock_shared ( key1 integer , key2 integer )
→ boolean
Получает разделяемую рекомендательную блокировку на уровне сессии, если она доступна.
Это либо немедленно получает блокировку и возвращает true , либо возвращает false без ожидания, если блокировка не может быть немедленно получена.
|
pg_try_advisory_xact_lock ( key bigint )
→ boolean
pg_try_advisory_xact_lock ( key1 integer , key2 integer )
→ boolean
Получает эксклюзивную рекомендательную блокировку на уровне транзакции, если она доступна.
Это либо немедленно получает блокировку и возвращает true , либо возвращает false без ожидания, если блокировка не может быть немедленно получена.
|
pg_try_advisory_xact_lock_shared ( key bigint )
→ boolean
pg_try_advisory_xact_lock_shared ( key1 integer , key2 integer )
→ boolean
Получает разделяемую рекомендательную блокировку на уровне транзакции, если она доступна.
Это либо немедленно получает блокировку и возвращает true , либо возвращает false без ожидания, если блокировка не может быть немедленно получена.
|