9.27. Функции для системного администрирования #
- 9.27.1. Функции для управления конфигурацией
- 9.27.2. Функции для передачи сигналов серверу
- 9.27.3. Функции управления резервным копированием
- 9.27.4. Функции управления восстановлением
- 9.27.5. Функции синхронизации снимков
- 9.27.6. Функции управления репликацией
- 9.27.7. Функции управления объектами баз данных
- 9.27.8. Функции обслуживания индексов
- 9.27.9. Функции для работы с обычными файлами
- 9.27.10. Функции управления рекомендательными блокировками
- 9.27.11. Функции управления сжатием
- 9.27.12. Опорные функции журнала операций
- 9.27.13. Отладочные функции
- 9.27.2. Функции для передачи сигналов серверу
Функции, описанные в этом разделе, предназначены для контроля и управления сервером Postgres Pro.
9.27.1. Функции для управления конфигурацией #
В Таблице 9.90 показаны функции, позволяющие получить и изменить значения параметров конфигурации выполнения.
Таблица 9.90. Функции для управления конфигурацией
Функция Описание Пример(ы) |
---|
Выдаёт текущее значение параметра
|
Устанавливает для параметра
|
Устанавливает в обслуживающем процессе с заданным идентификатором один или несколько параметров, указываемых в строке |
Загружает библиотеку с указанным именем в процесс с заданным идентификатором. За один вызов функции можно загрузить только одну библиотеку. При запуске без привилегий суперпользователя функция |
Функции pg_backend_set_config
и pg_backend_load_library
предназначены для изменения параметров конфигурации и загрузки общих библиотек в другие сеансы. Это может быть полезно для трассировки сеансов с необычным поведением. Во избежание угроз безопасности эти функции разрешено вызывать только суперпользователю.
Примечание
Эту функциональность нельзя использовать со встроенным пулом соединений, описанным в Главе 35.
По умолчанию функции pg_backend_set_config
и pg_backend_load_library
возвращают true
, не дожидаясь ответа от целевого обслуживающего процесса. Вы можете добавить дополнительный параметр wait
, задающий в секундах интервал времени, в течение которого эти функции будут ждать, пока целевой процесс не подтвердит получение команды. Если подтверждение поступит за указанное время, результатом функций будет true
, в противном случае — false
. Заметьте, что возвращаемое значение не отражает действительный результат запрошенного действия. В случае сбоя при изменении конфигурации в целевом процессе происходит ошибка, и текущая команда в том процессе прерывается.
Рассмотрите следующие примеры:
SELECT pg_backend_set_config(pg_backend_pid(), 'statement_timeout=10000'); pg_backend_set_config ----------------------- t (1 row) SELECT pg_backend_set_config(pg_backend_pid(), 'statement_timeout=20000 lock_timeout=10000'); pg_backend_set_config ----------------------- t (1 row) SELECT pg_backend_set_config(pg_backend_pid(), 'fsync=on'); ERROR: parameter "fsync" cannot be changed now SELECT pg_backend_set_config(pg_backend_pid(), 'log_min_messages=INFO'); ERROR: permission denied to set parameter "log_min_messages"
SELECT pg_backend_load_library(pg_backend_pid(), 'pgoutput'); pg_backend_load_library ------------------------- t (1 row)
9.27.2. Функции для передачи сигналов серверу #
Функции, перечисленные в Таблице 9.91, позволяют передавать управляющие сигналы другим серверным процессам. Вызывать эти функции по умолчанию разрешено только суперпользователям, но доступ к ним можно дать и другим пользователям командой GRANT
, кроме явно отмеченных исключений.
Все эти функции возвращают true
, если сигнал успешно отправлен, и false
, если отправить сигнал не удалось.
Таблица 9.91. Функции для передачи сигналов серверу
Функция Описание |
---|
Отменяет текущий запрос в сеансе, который обслуживается процессом с заданным PID. Это действие разрешается и ролям, являющимся членами роли, запрос которой отменяется, и ролям с правами роли |
Запрашивает вывод в журнал информации о контекстах памяти обслуживающего процесса с указанным PID. Эта функция может отправлять запрос обслуживающим и вспомогательным процессам, кроме процесса протоколирования. Запрошенная информация будет выведена в сообщениях уровня |
Даёт всем процессам сервера Postgres Pro команду перезагрузить файлы конфигурации. (Для этого посылается сигнал SIGHUP главному процессу, который, в свой очередь, посылает SIGHUP всем своим дочерним процессам.) Вы можете прочитать представления |
Указывает менеджеру журнала сообщений немедленно переключиться на новый файл. Это имеет смысл, только когда работает встроенный сборщик сообщений, так как без него подпроцесс менеджера журнала не запускается. |
Завершает сеанс, который обслуживается процессом с заданным PID. Это действие разрешается и ролям, являющимся членами роли, процесс которой прерывается, и ролям с правами роли Если параметр |
Вызывает перепланирование в реальном времени текущего запроса в сеансе, связанном с серверным процессом с указанным идентификатором PID. В этом сеансе должно быть включено перепланирование в реальном времени, и сам запрос должен допускать такую операцию. Возвращаемое значение указывает, был ли сигнал успешно отправлен, независимо от того, оказал ли он какое-либо влияние. Выполнять эту функцию могут только суперпользователи. |
pg_cancel_backend
и pg_terminate_backend
передают сигналы (SIGINT и SIGTERM, соответственно) серверному процессу с заданным кодом PID. Код активного процесса можно получить из столбца pid
представления pg_stat_activity
или просмотрев на сервере процессы с именем postgres
(используя ps в Unix или Диспетчер задач в 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.92, предназначены для выполнения резервного копирования «на ходу». Эти функции нельзя выполнять во время восстановления (за исключением pg_backup_start
, pg_backup_stop
и pg_wal_lsn_diff
).
Подробнее практическое применение этих функций описывается в Разделе 25.3.
Таблица 9.92. Функции управления резервным копированием
Функция Описание |
---|
Создаёт в журнале предзаписи именованный маркер, который можно использовать как цель при восстановлении, и возвращает соответствующую ему позицию в журнале. Полученное имя затем можно указать в параметре recovery_target_name, определив тем самым точку, до которой будет выполняться восстановление. Учтите, что если будет создано несколько точек восстановления с одним именем, восстановление остановится на первой точке с этим именем. По умолчанию доступ к этой функции имеют только суперпользователи, но право на её выполнение (EXECUTE) можно дать и другим пользователям. |
Выдаёт текущую позицию сброса данных в журнале предзаписи (см. примечания ниже). |
Выдаёт текущую позицию добавления в журнале предзаписи (см. примечания ниже). |
Выдаёт текущую позицию записи в журнале предзаписи (см. примечания ниже). |
Подготавливает сервер к резервному копированию «на лету». Единственный обязательный параметр задаёт произвольную пользовательскую метку резервной копии. (Обычно это имя, которое получит файл резервной копии.) Если необязательный второй параметр задан и имеет значение По умолчанию доступ к этой функции имеют только суперпользователи, но право на её выполнение (EXECUTE) можно дать и другим пользователям. |
Завершает выполнение резервного копирования. В результате возвращается ожидаемое содержимое файла метки резервной копии и файла карты табличных пространств, которое нужно сохранить в файлы в архиве (не в каталоге данных). Эти файлы нельзя записывать в каталог работающей базы данных (в противном случае Postgres Pro не сможет перезапуститься, если произойдёт сбой). У этой функции есть также необязательный параметр типа При выполнении на ведущем эта функция также создаёт файл истории резервного копирования в области архива журнала предзаписи. В этом файле для данной резервной копии сохраняется метка, заданная при вызове В результате эта функция выдаёт единственную запись. Столбец По умолчанию доступ к этой функции имеют только суперпользователи, но право на её выполнение (EXECUTE) можно дать и другим пользователям. |
Производит принудительное переключение журнала предзаписи на новый файл, что позволяет архивировать текущий (в предположении, что выполняется непрерывная архивация). Результат функции — конечная позиция в только что законченном файле журнала предзаписи + 1. Если с момента последнего переключения файлов не было активности, отражающейся в журнале предзаписи, По умолчанию доступ к этой функции имеют только суперпользователи, но право на её выполнение (EXECUTE) можно дать и другим пользователям. |
Выдаёт для заданной позиции в журнале предзаписи имя соответствующего файла WAL. |
Выдаёт для заданной позиции в журнале предзаписи имя соответствующего файла и байтовое смещение в нём. |
Извлекает последовательный номер и идентификатор линии времени из имени файла WAL. |
Вычисляет разницу в байтах ( |
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.93, предоставляют сведения о текущем состоянии ведомого сервера. Эти функции могут выполняться как во время восстановления, так и в обычном режиме работы.
Таблица 9.93. Функции для получения информации о восстановлении
Функции, перечисленные в Таблице 9.94 управляют процессом восстановления. Вызывать их в другое время нельзя.
Таблица 9.94. Функции управления восстановлением
Функции pg_wal_replay_pause
и pg_wal_replay_resume
нельзя выполнять в процессе повышения. Если повышение запрашивается, когда восстановление приостановлено, сервер выходит из состояния паузы и продолжает процедуру повышения.
Когда потоковая репликация отключена, пауза при восстановлении может длиться сколь угодно долго без каких-либо проблем. Если же потоковая репликация осуществляется, новые записи WAL продолжат поступать и заполнят весь диск рано или поздно, в зависимости от длительности паузы, интенсивности записи в WAL и объёма свободного пространства.
9.27.5. Функции синхронизации снимков #
Postgres Pro позволяет синхронизировать снимки состояния между сеансами баз данных. Снимок состояния определяет, какие данные видны транзакции, работающей с этим снимком. Синхронизация снимков необходима, когда в двух или более сеансах нужно видеть одно и то же содержимое базы данных. Если в двух сеансах транзакции запускаются независимо, всегда есть вероятность, что некая третья транзакция будет зафиксирована между командами START TRANSACTION
для первых двух, и в результате в одном сеансе будет виден результат третьей, а в другом — нет.
Для решения этой проблемы Postgres Pro позволяет транзакции экспортировать снимок состояния, с которым она работает. Пока экспортирующая этот снимок транзакция выполняется, другие транзакции могут импортировать его и, таким образом, увидеть абсолютно то же состояние базы данных, что видит первая транзакция. Но учтите, что любые изменения, произведённые этими транзакциями, будут не видны для других, как это и должно быть с изменениями в незафиксированных транзакциях. Таким образом, транзакции синхронизируют только начальное состояние данных, а последующие производимые в них изменения изолируются как обычно.
Снимки состояния экспортируются с помощью функции pg_export_snapshot
, показанной в Таблице 9.95, и импортируются командой SET TRANSACTION.
Таблица 9.95. Функции синхронизации снимков
Функция Описание |
---|
Сохраняет текущий снимок состояния транзакции и возвращает строку типа Если необходимо, транзакция может экспортировать несколько снимков. Заметьте, что это имеет смысл только для транзакций уровня |
Сделать снимок выполняющихся транзакций и записать его в WAL, не дожидаясь, пока процессы bgwriter или checkpointer запишут его. Это полезно для логического декодирования на резервном сервере, поскольку создание логического слота должно откладываться до тех пор, пока такая запись не будет воспроизведена на резервном сервере. |
9.27.6. Функции управления репликацией #
В Таблице 9.96 показаны функции, предназначенные для управления механизмом репликации и взаимодействия с ним. Чтобы изучить этот механизм подробнее, обратитесь к Подразделу 26.2.5, Подразделу 26.2.6 и Главе 53. По умолчанию только суперпользователи имеют разрешение выполнять функции с источниками репликации, но его можно дать и другим, воспользовавшись командой GRANT
. Использование данных функций для слотов репликации разрешено только суперпользователям и пользователям, имеющим право REPLICATION
.
Многие из этих функций соответствуют командам в протоколе репликации; см. Раздел 58.4.
Функции, описанные в Подразделе 9.27.3, Подразделе 9.27.4 и Подразделе 9.27.5, также имеют отношение к репликации.
Таблица 9.96. Функции управления репликацией
Функция Описание |
---|
Создаёт новый физический слот репликации с именем |
Удаляет физический или логический слот репликации с именем |
Создаёт новый логический (декодирующий) слот репликации с именем |
Копирует существующий слот физической репликации с именем |
Копирует существующий слот логической репликации с именем |
Возвращает изменения в слоте |
Работает так же, как функция |
Работает так же, как функция |
Работает аналогично функции |
Продвигает текущую подтверждённую позицию слота репликации с именем |
Создаёт источник репликации с заданным внешним именем и возвращает назначенный ему внутренний идентификатор. |
Удаляет ранее созданный источник репликации, в том числе связанную информацию о воспроизведении. |
Ищет источник репликации по имени и возвращает внутренний идентификатор. Если такой источник не находится, возвращает |
Помечает текущий сеанс как воспроизводящий изменения из указанного источника, что позволяет отслеживать процесс воспроизведения. Может применяться, только если в текущий момент источник ещё не выбран. Для отмены этого действия вызовите |
Отменяет действие |
Возвращает true, если в текущем сеансе выбран источник репликации. |
Возвращает позицию воспроизведения для источника репликации, выбранного в текущем сеансе. Параметр |
Помечает текущую транзакцию как воспроизводящую транзакцию, зафиксированную с указанным LSN и временем. Может вызываться только после того, как источник репликации был выбран в результате вызова |
Отменяет действие |
Устанавливает положение репликации для заданного узла в указанную позицию. Это в основном полезно для установки начальной позиции или новой позиции после изменения конфигурации и подобных действий. Но учтите, что неосторожное использование этой функции может привести к несогласованности реплицированных данных. |
Выдаёт позицию воспроизведения для заданного источника репликации. Параметр |
Генерирует сообщение логического декодирования. Её можно использовать для передачи через WAL произвольных сообщений модулям логического декодирования. Параметр |
9.27.7. Функции управления объектами баз данных #
Функции, показанные в Таблице 9.97, вычисляют объём, который занимают на диске объекты базы данных, и помогают воспринять и проанализировать информацию об используемом объёме. Результаты типа bignit
представляют значения в байтах. Если им передаётся OID, не соответствующий существующему объекту, эти функции возвращают NULL
.
Таблица 9.97. Функции получения размера объектов БД
Функция Описание |
---|
Показывает, сколько байт занимает при хранении отдельное значение. Если эта функция применяется непосредственно к значению в столбце таблицы, в результате отражается эффект возможного сжатия. |
Показывает алгоритм сжатия, который использовался для сжатия отдельного значения переменной длины. Возвращает |
Вычисляет общий объём, который занимает на диске база данных с указанным именем или OID. Для использования этой функции необходимо иметь право |
Вычисляет общий объём, который занимают на диске индексы, связанные с указанной таблицей. |
Вычисляет объём, который занимает на диске один «слой» заданного отношения. (Заметьте, что в большинстве случаев удобнее использовать более высокоуровневые функции
|
Принимает OID или имя временной таблицы и возвращает общий размер в байтах слоя |
Преобразует размер в понятном человеку формате (который выдаёт |
Преобразует размер в байтах в более понятный человеку формат с единицами измерения размера (bytes, kB, MB, GB, TB или PB, в зависимости от значения). Заметьте, что эти единицы определяются как степени 2, а не 10, так что 1kB — это 1024 байта, 1MB — 10242 = 1048576 байт и т. д. |
Вычисляет объём, который занимает на диске данная таблица, за исключением индексов (но включая её TOAST-таблицу (если она есть), карту свободного места и карту видимости). |
Вычисляет общий объём, который занимает на диске табличное пространство с заданным именем или OID. Для использования этой функции требуется иметь право |
Вычисляет общий объём, который занимает на диске заданная таблица, включая все её индексы и данные TOAST. Результат этой функции равен значению |
Вышеописанные функции, работающие с таблицами или индексами, принимают аргумент типа regclass
, который представляет собой просто OID таблицы или индекса в системном каталоге pg_class
. Однако вам не нужно вручную вычислять OID, так как процедура ввода значения regclass
может сделать это за вас. За подробностями обратитесь к Разделу 8.19.
Функции, перечисленные в Таблице 9.98, помогают определить, в каких файлах на диске хранятся объекты базы данных.
Таблица 9.98. Функции определения расположения объектов
Функция Описание |
---|
Выдаёт номер «файлового узла», связанного с заданным объектом. Файловым узлом называется основной компонент имени файла, используемого для хранения данных (подробнее это описано в Разделе 74.1). Для большинства отношений этот номер совпадает со значением |
Выдаёт полный путь к файлу отношения (относительно каталога данных |
Выдаёт OID отношения, которое хранится в табличном пространстве, заданном по OID, в указанном файловом узле. По сути эта функция является обратной к |
В Таблица 9.99 перечислены функции, предназначенные для управления правилами сортировки.
Таблица 9.99. Функции управления правилами сортировки
Функция Описание |
---|
Возвращает действующую версию объекта правила сортировки, которая в настоящее время установлена в операционной системе. Если она отличается от значения в |
Возвращает действующую версию правила сортировки БД, установленную на данный момент в операционной системе. Если она отличается от значения в |
Добавляет правила сортировки в системный каталог |
В Таблице 9.100 перечислены функции, предоставляющие информацию о структуре секционированных таблиц.
Таблица 9.100. Функции получения информации о секционировании
Например, чтобы определить общий размер данных, содержащихся в секционированной таблице measurement
, можно использовать следующий запрос:
SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size FROM pg_partition_tree('measurement');
9.27.8. Функции обслуживания индексов #
В Таблице 9.101 перечислены функции, предназначенные для обслуживания индексов. (Заметьте, что задачи обслуживания обычно выполняются автоматически в ходе автоочистки; пользоваться данными функциями требуется только в особых случаях.) Выполнять эти функции во время восстановления нельзя. Использовать их разрешено только суперпользователям и владельцу определённого индекса.
Таблица 9.101. Функции обслуживания индексов
Функция Описание |
---|
Сканирует указанный BRIN-индекс в поисках зон страниц в базовой таблице, ещё не обобщённых в индексе; для каждой такой зоны в результате сканирования этих страниц создаётся новый обобщающий кортеж в индексе. Возвращает эта функция число вставленных в индекс обобщающих записей о зонах страниц. |
Обобщает зону страниц, охватывающую данный блок, если она ещё не была обобщена. Эта функция подобна |
Удаляет из BRIN-индекса кортеж, который обобщает зону страниц, охватывающую данный блок таблицы, если такой кортеж имеется. |
Очищает очередь указанного GIN-индекса, массово перемещая элементы из неё в основную структуру данных GIN, и возвращает число страниц, убранных из очереди. Если для обработки ей передаётся индекс GIN, построенный с отключённым параметром |
9.27.9. Функции для работы с обычными файлами #
Функции, перечисленные в Таблице 9.102, предоставляют прямой доступ к файлам, находящимся на сервере. Обычным пользователям, не включённым в роль pg_read_server_files
, они позволяют обращаться только к файлам в каталоге кластера баз данных и в каталоге log_directory
. Для файлов в каталоге кластера этим функциям передаётся относительный путь, а для файлов журнала — путь, соответствующий значению параметра log_directory
.
Заметьте, что пользователи, обладающие правом EXECUTE для pg_read_file()
или связанных функций, имеют возможность читать любой файл на сервере, который может прочитать серверный процесс; на эти функции не действуют никакие ограничения доступа внутри базы данных. В частности это означает, что пользователь с такими правами может прочитать содержимое таблицы pg_authid
, в которой хранятся данные аутентификации, равно как и любой другой файл в базе данных. Таким образом, разрешать доступ к этим функциям следует с большой осторожностью.
При предоставлении прав для этих функций обратите внимание, что записи таблицы, показывающие необязательные параметры, в большинстве случаев реализованы как несколько физических функций с разными списками параметров. Права должны быть предоставлены отдельно для каждой такой функции, если она будет использоваться. Команда psql \df
может быть полезна для проверки фактических сигнатур функций.
Некоторые из этих функций принимают необязательный параметр missing_ok
, который определяет их поведение в случае отсутствия файла или каталога. Если он равен true
, функция возвращает NULL
или пустой набор данных. Если же он равен false
, в указанном случае выдаётся ошибка. (Условия сбоя, кроме «file not found» (файл не найден), в любом случае считаются ошибками.) Значение по умолчанию — false
.
Таблица 9.102. Функции для работы с обычными файлами
9.27.10. Функции управления рекомендательными блокировками #
Функции, перечисленные в Таблице 9.103, предназначены для управления рекомендательными блокировками. Подробнее об их использовании можно узнать в Подразделе 13.3.5.
Все эти функции предназначены для оперирования блокировками ресурсов, определяемых приложением и задаваемых одним 64-битным или двумя 32-битными ключами (заметьте, что пространства этих ключей не пересекаются). Если конфликтующую блокировку с тем же идентификатором уже удерживает другой сеанс, эти функции либо дожидаются освобождения ресурса, либо выдают в результате false
, в зависимости от вида функции. Блокировки могут быть как исключительными, так и разделяемыми — разделяемая блокировка не конфликтует с другими разделяемыми блокировками того же ресурса, но конфликтует с исключительными. Блокировки могут устанавливаться на сеансовом уровне (тогда они удерживаются до момента освобождения или до завершения сеанса) и на транзакционном (тогда они удерживаются до конца текущей транзакции, освободить их вручную нет возможности). Когда поступает несколько запросов на блокировку сеансового уровня, они накапливаются, так что если один идентификатор ресурса был заблокирован три раза, должны поступить три запроса на освобождение блокировки, чтобы ресурс был разблокирован до завершения сеанса.
Таблица 9.103. Функции управления рекомендательными блокировками
9.27.11. Функции управления сжатием #
Функции, приведённые в Таблице 9.104, выдают информацию о состоянии и активности CFS, а также управляют сборкой мусора CFS.
Таблица 9.104. Функции управления сжатием
Имя | Тип результата | Описание |
---|---|---|
| integer | Запускает сборку мусора с заданным числом рабочих процессов. Вы можете запустить её вручную с помощью этой функции, только если фоновая сборка мусора отключена. |
| boolean | Включает/отключает фоновый процесс сборки мусора. Для управления вы также можете использовать переменную конфигурации cfs_gc. |
| integer | Выполняет сборку мусора для заданной таблицы. Эта функция возвращает число обработанных сегментов. |
| text | Выводит версию CFS и используемый алгоритм сжатия. |
| float8 | Оценивает возможный эффект от сжатия таблицы. Возвращает средний коэффициент сжатия для первых десяти блоков отношения. |
| float8 | Возвращает фактический коэффициент сжатия для всех сегментов сжатого отношения. |
| float8 | Возвращает средний коэффициент фрагментации для файлов заданного отношения. |
| int64 | Возвращает общий размер страниц, обработанных механизмом CFS в процессе сборки мусора. |
| int64 | Возвращает число страниц, обработанных механизмом CFS в процессе сборки мусора. |
| int64 | Возвращает число файлов, сжатых механизмом CFS в процессе сборки мусора. |
| int64 | Возвращает число файлов, просканированных механизмом CFS в процессе сборки мусора. |
9.27.12. Опорные функции журнала операций #
В журнале операций хранится информация о критически важных системных событиях, таких как обновление, выполнение pg_resetwal и т. п. Эта информация не представляет особого интереса для обычного пользователя, но важна для осуществления технической поддержки со стороны поставщика. Запись в журнал операций производится только на системном уровне (без каких-либо действий со стороны пользователя), а для его чтения используются функции SQL. Функция, показанная в Таблица 9.105, читает журнал операций.
Таблица 9.105. Опорные функции журнала операций
Функция Описание |
---|
Здесь:
Эта системная функция создаётся автоматически для новых баз данных, а для существующих баз данных должна создаваться следующим образом: CREATE OR REPLACE FUNCTION pg_operation_log( OUT event text, OUT edition text, OUT version text, OUT lsn pg_lsn, OUT last timestamptz, OUT count int4) RETURNS SETOF record LANGUAGE INTERNAL STABLE STRICT PARALLEL SAFE AS 'pg_operation_log'; |
Ниже представлен пример вывода для функции pg_operation_log
:
select * from pg_operation_log(); event | edition | version | lsn | last | count ------------+---------+---------+-----------+------------------------+------- startup | vanilla | 10.22.0 | 0/8000028 | 2022-10-27 23:06:27+03 | 1 pg_upgrade | 1c | 15.0.0 | 0/8000028 | 2022-10-27 23:06:27+03 | 1 startup | 1c | 15.0.0 | 0/80001F8 | 2022-10-27 23:06:53+03 | 2 (3 rows)
Примечание
Если журнал операций пуст, то при обновлении перед записью pg_upgrade сначала записывается событие startup
с предыдущим значением version
, имеющим следующие особенности: вместо версии патча (третья цифра в номере версии) всегда устанавливается ноль, поскольку в pg_upgrade нет информации о версии патча ни для одной редакции (1c
, std
, ent
). При обновлении с 1c
или vanilla
невозможно выяснить, к какой из этих редакций относится база данных до обновления, поэтому для записи startup
используется редакция vanilla
.
9.27.13. Отладочные функции #
Функция, показанная в Таблице 9.106, может быть полезна для низкоуровневых операций, например в целях отладки или исследования испорченных баз данных Postgres Pro.
Таблица 9.106. Функции синхронизации снимков
Имя | Тип результата | Описание |
---|---|---|
| void | Отключает действие правил MVCC в рамках текущей транзакции, что позволяет видеть в ней все версии данных. |
Применяйте pg_snapshot_any
крайне осторожно. Выполнять её следует в транзакции с уровнем изоляции REPEATABLE READ
или выше, в противном случае следующий же запрос заменит выбранный снимок новым. Выполнять её могут только суперпользователи.
Примечание
Если ваш кластер БД создавался сервером версии, в которой этой функции ещё не было, определите её следующей командой:
CREATE FUNCTION pg_snapshot_any() RETURNS void AS 'pg_snapshot_any' LANGUAGE internal;