9.28. Функции для системного администрирования #
- 9.28.1. Функции для управления конфигурацией
- 9.28.2. Функции для передачи сигналов серверу
- 9.28.3. Функции управления резервным копированием
- 9.28.4. Функции управления восстановлением
- 9.28.5. Функции синхронизации снимков
- 9.28.6. Функции управления репликацией
- 9.28.7. Функции управления объектами баз данных
- 9.28.8. Функции обслуживания индексов
- 9.28.9. Функции для работы с обычными файлами
- 9.28.10. Функции управления рекомендательными блокировками
- 9.28.11. Функции управления сжатием
- 9.28.12. Опорные функции журнала операций
- 9.28.13. Отладочные функции
- 9.28.14. Функции для устранения неполадок
- 9.28.2. Функции для передачи сигналов серверу
Функции, описанные в этом разделе, предназначены для контроля и управления сервером Postgres Pro.
9.28.1. Функции для управления конфигурацией #
В Таблице 9.93 показаны функции, позволяющие получить и изменить значения параметров конфигурации выполнения.
Таблица 9.93. Функции для управления конфигурацией
Функция Описание Пример(ы) |
|---|
Выдаёт текущее значение параметра
|
Устанавливает для параметра
|
Устанавливает в обслуживающем процессе с заданным идентификатором один или несколько параметров, указываемых в строке Если дополнительный |
Выдаёт текущее значение параметра Вы можете указать время ожидания для значения запрошенного параметра в секундах с помощью дополнительного параметра Обратите внимание, что время ожидания значения запрошенного параметра может быть неопределённым. Целевой обслуживающий процесс предоставит значение запрошенного параметра, только после завершения текущей транзакции. Если обслуживающий процесс находится в состоянии ожидания, он не сможет предоставить значение запрошенного параметра. |
Загружает библиотеку с указанным именем в процесс с заданным идентификатором. За один вызов функции можно загрузить только одну библиотеку. При запуске без привилегий суперпользователя функция Если дополнительный |
Функции pg_backend_set_config и pg_backend_load_library предназначены для изменения параметров конфигурации и загрузки общих библиотек в другие сеансы. Это может быть полезно для трассировки сеансов с необычным поведением. Во избежание угроз безопасности эти функции разрешено вызывать только суперпользователю.
В случаях сбоя при изменении конфигурации функцией pg_backend_set_config или при загрузке библиотеки функцией pg_backend_load_library в целевом процессе происходит ошибка, и текущая команда в этом процессе прерывается.
Рассмотрим следующие примеры:
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_get_config_value(pg_backend_pid(), 'statement_timeout');
pg_backend_get_config_value
-----------------------------
20s
(1 row)
SELECT pg_backend_get_config_value(pg_backend_pid(), 'lock_timeout');
pg_backend_get_config_value
-----------------------------
10s
(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)
Если параметр config, переданный функции pg_backend_set_config, содержит синтаксическую ошибку, функция возвращает соответствующее сообщение об ошибке.
Рассмотрим следующий пример:
SELECT pg_backend_set_config(pg_backend_pid(), 'test_param', 100000); ERROR: syntax error in file "base/pgsql_tmp/pgsql_tmp87011.4" line 0, near end of line
9.28.2. Функции для передачи сигналов серверу #
Функции, перечисленные в Таблице 9.94, позволяют передавать управляющие сигналы другим серверным процессам. Вызывать эти функции по умолчанию разрешено только суперпользователям, но доступ к ним можно дать и другим пользователям командой GRANT, кроме явно отмеченных исключений.
Все эти функции возвращают true, если сигнал успешно отправлен, и false, если отправить сигнал не удалось.
Таблица 9.94. Функции для передачи сигналов серверу
Функция Описание |
|---|
Отменяет текущий запрос в сеансе, который обслуживается процессом с заданным PID. Это действие разрешается и ролям, являющимся членами роли, запрос которой отменяется, и ролям с правами роли |
Запрашивает вывод в журнал информации о контекстах памяти обслуживающего процесса с указанным PID. Эта функция может отправлять запрос обслуживающим и вспомогательным процессам, кроме процесса протоколирования. Запрошенная информация будет выведена в сообщениях уровня |
Даёт всем процессам сервера Postgres Pro команду перезагрузить файлы конфигурации. (Для этого посылается сигнал SIGHUP главному процессу, который, в свой очередь, посылает SIGHUP всем своим дочерним процессам.) Вы можете прочитать представления |
Указывает менеджеру журнала сообщений немедленно переключиться на новый файл. Это имеет смысл, только когда работает встроенный сборщик сообщений, так как без него подпроцесс менеджера журнала не запускается. |
Завершает сеанс, который обслуживается процессом с заданным PID. Это действие разрешается и ролям, являющимся членами роли, процесс которой прерывается, и ролям с правами роли Если параметр |
Запускает повторное планирование через механизм адаптивного выполнения запросов (AQE) для текущего запроса в сеансе, связанном с серверным процессом с указанным идентификатором PID. В этом сеансе должен быть включён AQE, а сам запрос пригоден для повторного планирования. Возвращаемое значение указывает, был ли сигнал успешно отправлен, независимо от того, оказал ли он какое-либо влияние. Выполнять эту функцию могут только суперпользователи. |
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.28.3. Функции управления резервным копированием #
Функции, перечисленные в Таблице 9.95, предназначены для выполнения резервного копирования «на ходу». Эти функции нельзя выполнять во время восстановления (за исключением pg_backup_start, pg_backup_stop и pg_wal_lsn_diff).
Подробнее практическое применение этих функций описывается в Разделе 25.3.
Таблица 9.95. Функции управления резервным копированием
Функция Описание |
|---|
Создаёт в журнале предзаписи именованный маркер, который можно использовать как цель при восстановлении, и возвращает соответствующую ему позицию в журнале. Полученное имя затем можно указать в параметре 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.28.4. Функции управления восстановлением #
Функции, показанные в Таблице 9.96, предоставляют сведения о текущем состоянии ведомого сервера. Эти функции могут выполняться как во время восстановления, так и в обычном режиме работы.
Таблица 9.96. Функции для получения информации о восстановлении
Функции, перечисленные в Таблице 9.97 управляют процессом восстановления. Вызывать их в другое время нельзя.
Таблица 9.97. Функции управления восстановлением