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.2. Функции для передачи сигналов серверу
Функции, описанные в этом разделе, предназначены для контроля и управления сервером Postgres Pro.
9.28.1. Функции для управления конфигурацией #
В Таблице 9.95 показаны функции, позволяющие получить и изменить значения параметров конфигурации выполнения.
Таблица 9.95. Функции для управления конфигурацией
Функция Описание Пример(ы) |
|---|
Выдаёт текущее значение параметра
|
Устанавливает для параметра Функция
|
9.28.2. Функции для передачи сигналов серверу #
Функции, перечисленные в Таблице 9.96, позволяют передавать управляющие сигналы другим серверным процессам. Вызывать эти функции по умолчанию разрешено только суперпользователям, но доступ к ним можно дать и другим пользователям командой GRANT, кроме явно отмеченных исключений.
Все эти функции возвращают true, если сигнал успешно отправлен, и false, если отправить сигнал не удалось.
Таблица 9.96. Функции для передачи сигналов серверу
Функция Описание |
|---|
Отменяет текущий запрос в сеансе, который обслуживается процессом с заданным PID. Это действие разрешается и ролям, являющимся членами роли, запрос которой отменяется, и ролям с правами роли |
Запрашивает вывод в журнал информации о контекстах памяти обслуживающего процесса с указанным PID. Эта функция может отправлять запрос обслуживающим и вспомогательным процессам, кроме процесса протоколирования. Запрошенная информация будет выведена в сообщениях уровня |
Даёт всем процессам сервера Postgres Pro команду перезагрузить файлы конфигурации. (Для этого посылается сигнал SIGHUP главному процессу, который, в свой очередь, посылает SIGHUP всем своим дочерним процессам.) Вы можете прочитать представления |
Указывает менеджеру журнала сообщений немедленно переключиться на новый файл. Это имеет смысл, только когда работает встроенный сборщик сообщений, так как без него подпроцесс менеджера журнала не запускается. |
Завершает сеанс, который обслуживается процессом с заданным 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: 1; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used LOG: level: 2; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used LOG: level: 2; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used LOG: level: 2; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used LOG: level: 2; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used LOG: level: 2; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used LOG: level: 2; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used LOG: level: 2; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used ... LOG: level: 2; 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.97, предназначены для выполнения резервного копирования «на ходу». Эти функции нельзя выполнять во время восстановления (за исключением pg_backup_start, pg_backup_stop и pg_wal_lsn_diff).
Подробнее практическое применение этих функций описывается в Разделе 24.3.
Таблица 9.97. Функции управления резервным копированием
Функция Описание |
|---|
Создаёт в журнале предзаписи именованный маркер, который можно использовать как цель при восстановлении, и возвращает соответствующую ему позицию в журнале. Полученное имя затем можно указать в параметре 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.98, предоставляют сведения о текущем состоянии ведомого сервера. Эти функции могут выполняться как во время восстановления, так и в обычном режиме работы.
Таблица 9.98. Функции для получения информации о восстановлении
Функции, перечисленные в Таблице 9.99 управляют процессом восстановления. Вызывать их в другое время нельзя.
Таблица 9.99. Функции управления восстановлением
Функции pg_wal_replay_pause и pg_wal_replay_resume нельзя выполнять в процессе повышения. Если повышение запрашивается, когда восстановление приостановлено, сервер выходит из состояния паузы и продолжает процедуру повышения.
Когда потоковая репликация отключена, пауза при восстановлении может длиться сколь угодно долго без каких-либо проблем. Если же потоковая репликация осуществляется, новые записи WAL продолжат поступать и заполнят весь диск рано или поздно, в зависимости от длительности паузы, интенсивности записи в WAL и объёма свободного пространства.
9.28.5. Функции синхронизации снимков #
Postgres Pro позволяет синхронизировать снимки состояния между сеансами баз данных. Снимок состояния определяет, какие данные видны транзакции, работающей с этим снимком. Синхронизация снимков необходима, когда в двух или более сеансах нужно видеть одно и то же содержимое базы данных. Если в двух сеансах транзакции запускаются независимо, всегда есть вероятность, что некая третья транзакция будет зафиксирована между командами START TRANSACTION для первых двух, и в результате в одном сеансе будет виден результат третьей, а в другом — нет.
Для решения этой проблемы Postgres Pro позволяет транзакции экспортировать снимок состояния, с которым она работает. Пока экспортирующая этот снимок транзакция выполняется, другие транзакции могут импортировать его и, таким образом, увидеть абсолютно то же состояние базы данных, что видит первая транзакция. Но учтите, что любые изменения, произведённые этими транзакциями, будут не видны для других, как это и должно быть с изменениями в незафиксированных транзакциях. Таким образом, транзакции синхронизируют только начальное состояние данных, а последующие производимые в них изменения изолируются как обычно.
Снимки состояния экспортируются с помощью функции pg_export_snapshot, показанной в Таблице 9.100, и импортируются командой SET TRANSACTION.
Таблица 9.100. Функции синхронизации снимков
Функция Описание |
|---|
Сохраняет текущий снимок состояния транзакции и возвращает строку типа Если необходимо, транзакция может экспортировать несколько снимков. Заметьте, что это имеет смысл только для транзакций уровня |
Сделать снимок выполняющихся транзакций и записать его в WAL, не дожидаясь, пока процессы bgwriter или checkpointer запишут его. Это полезно для логического декодирования на резервном сервере, поскольку создание логического слота должно откладываться до тех пор, пока такая запись не будет воспроизведена на резервном сервере. |
9.28.6. Функции управления репликацией #
В Таблице 9.101 показаны функции, предназначенные для управления механизмом репликации и взаимодействия с ним. Чтобы изучить этот механизм подробнее, обратитесь к Подразделу 25.2.5, Подразделу 25.2.6 и Главе 49. По умолчанию только суперпользователи имеют разрешение выполнять функции с источниками репликации, но его можно дать и другим, воспользовавшись командой GRANT. Использование данных функций для слотов репликации разрешено только суперпользователям и пользователям, имеющим право REPLICATION.
Многие из этих функций соответствуют командам в протоколе репликации; см. Раздел 55.4.
Функции, описанные в Подразделе 9.28.3, Подразделе 9.28.4 и Подразделе 9.28.5, также имеют отношение к репликации.
Таблица 9.101. Функции управления репликацией
Функция Описание |
|---|
Создаёт новый физический слот репликации с именем |
Удаляет физический или логический слот репликации с именем |
Создаёт новый логический (декодирующий) слот репликации с именем |
Копирует существующий слот физической репликации с именем |
Копирует существующий слот логической репликации с именем |
Возвращает изменения в слоте |
Работает так же, как функция |
Работает так же, как функция |
Работает аналогично функции |
Продвигает текущую подтверждённую позицию слота репликации с именем |
Создаёт источник репликации с заданным внешним именем и возвращает назначенный ему внутренний идентификатор. Длина имени не должна превышать 512 байт. |
Удаляет ранее созданный источник репликации, в том числе связанную информацию о воспроизведении. |
Ищет источник репликации по имени и возвращает внутренний идентификатор. Если такой источник не находится, возвращает |
Помечает текущий сеанс как воспроизводящий изменения из указанного источника, что позволяет отслеживать процесс воспроизведения. Может применяться, только если в текущий момент источник ещё не выбран. Для отмены этого действия вызовите |
Отменяет действие |
Возвращает true, если в текущем сеансе выбран источник репликации. |
Возвращает позицию воспроизведения для источника репликации, выбранного в текущем сеансе. Параметр |
Помечает текущую транзакцию как воспроизводящую транзакцию, зафиксированную с указанным LSN и временем. Может вызываться только после того, как источник репликации был выбран в результате вызова |
Отменяет действие |
Устанавливает положение репликации для заданного узла в указанную позицию. Это в основном полезно для установки начальной позиции или новой позиции после изменения конфигурации и подобных действий. Но учтите, что неосторожное использование этой функции может привести к несогласованности реплицированных данных. |
Выдаёт позицию воспроизведения для заданного источника репликации. Параметр |
Генерирует сообщение логического декодирования. Её можно использовать для передачи через WAL произвольных сообщений модулям логического декодирования. Параметр |
Синхронизирует слоты для отработки отказа логической репликации с ведущего сервера на резервный. Эта функция может выполняться только на резервном сервере. Временные синхронизированные слоты, если таковые имеются, не могут использоваться для логического декодирования и должны быть удалены после повышения. За подробностями обратитесь к Подразделу 48.2.3. Обратите внимание, что эта функция в первую очередь используется в целях тестирования и отладки, а потому должна быть использована с осторожностью. Кроме того, она не может быть выполнена, если включён параметр ВниманиеЕсли после выполнения функции отключён параметр |
9.28.7. Функции управления объектами баз данных #
Функции, показанные в Таблице 9.102, вычисляют объём, который занимают на диске объекты базы данных, и помогают воспринять и проанализировать информацию об используемом объёме. Результаты типа bignit представляют значения в байтах. Если им передаётся OID, не соответствующий существующему объекту, эти функции возвращают NULL.
Таблица 9.102. Функции получения размера объектов БД
Функция Описание |
|---|
Показывает, сколько байт занимает при хранении отдельное значение. Если эта функция применяется непосредственно к значению в столбце таблицы, в результате отражается эффект возможного сжатия. |
Показывает алгоритм сжатия, который использовался для сжатия отдельного значения переменной длины. Возвращает |
Показывает |
Вычисляет общий объём, который занимает на диске база данных с указанным именем или 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.103, помогают определить, в каких файлах на диске хранятся объекты базы данных.
Таблица 9.103. Функции определения расположения объектов
Функция Описание |
|---|
Выдаёт номер «файлового узла», связанного с заданным объектом. Файловым узлом называется основной компонент имени файла, используемого для хранения данных (подробнее это описано в Разделе 65.1). Для большинства отношений этот номер совпадает со значением |
Выдаёт полный путь к файлу отношения (относительно каталога данных |
Выдаёт OID отношения, которое хранится в табличном пространстве, заданном по OID, в указанном файловом узле. По сути эта функция является обратной к |
В Таблица 9.104 перечислены функции, предназначенные для управления правилами сортировки.
Таблица 9.104. Функции управления правилами сортировки
Функция Описание |
|---|
Возвращает действующую версию объекта правила сортировки, которая в настоящее время установлена в операционной системе. Если она отличается от значения в |
Возвращает действующую версию правила сортировки БД, установленную на данный момент в операционной системе. Если она отличается от значения в |