F.53. pg_walinspect

Модуль pg_walinspect предоставляет SQL-функции для просмотра журнала предзаписи на низком уровне. Он работает с запущенным кластером баз данных PostgreSQL и может быть полезен для целей отладки, анализа, отчётности или обучения. Модуль похож на pg_waldump, но работает через SQL, а не как отдельная утилита.

Все функции этого модуля выдают информацию из WAL, относящуюся к текущей линии времени сервера.

Все функции этого модуля пытаются найти первую корректную запись WAL, начиная с заданного_lsn или начального_lsn, и возвращают ошибку, если такая запись не найдётся. Также в WAL должна быть запись, соответствующая конечному_lsn, и она должна быть полной.

Примечание

Некоторые функции, например pg_logical_emit_message, возвращают LSN после только что вставленной записи. Таким образом, если передать этот LSN в качестве заданного_lsn или начального_lsn одной из этих функций, она вернёт следующую запись.

По умолчанию использовать эти функции разрешено только суперпользователям и ролям, включённым в роль pg_read_server_files. Суперпользователь может дать доступ другим, воспользовавшись командой GRANT.

F.53.1. Функции общего назначения

pg_get_wal_record_info(in_lsn pg_lsn) returns record

Получает информацию о записи WAL по заданному LSN. Если заданный LSN находится не в начале записи, выдаёт информацию о следующей доступной корректной записи WAL. Если такой записи не существует, возвращает ошибку. Ниже представлен пример использования данной функции:

postgres=# SELECT * FROM pg_get_wal_record_info('0/1E826E98');
-[ RECORD 1 ]----+----------------------------------------------------
start_lsn        | 0/1E826F20
end_lsn          | 0/1E826F60
prev_lsn         | 0/1E826C80
xid              | 0
resource_manager | Heap2
record_type      | PRUNE
record_length    | 58
main_data_length | 8
fpi_length       | 0
description      | snapshotConflictHorizon 33748 nredirected 0 ndead 2
block_ref        | blkref #0: rel 1663/5/60221 fork main blk 2
pg_get_wal_records_info(start_lsn pg_lsn, end_lsn pg_lsn) returns setof record

Получает информацию обо всех корректных записях WAL между начальным_lsn и конечным_lsn. Возвращает одну строку для каждой записи WAL. Если начальный_lsn или конечный_lsn ещё недоступны, функция вернёт ошибку. Пример использования функции:

postgres=# SELECT * FROM pg_get_wal_records_info('0/1E913618', '0/1E913740') LIMIT 1;
-[ RECORD 1 ]----+--------------------------------------------------------------
start_lsn        | 0/1E913618
end_lsn          | 0/1E913650
prev_lsn         | 0/1E9135A0
xid              | 0
resource_manager | Standby
record_type      | RUNNING_XACTS
record_length    | 50
main_data_length | 24
fpi_length       | 0
description      | nextXid 33775 latestCompletedXid 33774 oldestRunningXid 33775
block_ref        |
pg_get_wal_records_info_till_end_of_wal(start_lsn pg_lsn) returns setof record

Эта функция действует так же, как pg_get_wal_records_info(), но получает информацию обо всех корректных записях WAL с начального_lsn до конца WAL.

pg_get_wal_stats(start_lsn pg_lsn, end_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record

Выдаёт статистику по всем корректным записям WAL между начальным_lsn и конечным_lsn. По умолчанию возвращает одну строку для каждого типа менеджера_ресурсов (resource_manager). Когда по_типу_записи имеет значение true, то возвращает отдельные строки для разных типов_записей (record_type). Если начальный_lsn или конечный_lsn ещё недоступны, функция возвращает ошибку. Пример использования функции:

postgres=# SELECT * FROM pg_get_wal_stats('0/1E847D00', '0/1E84F500')
           WHERE count > 0 AND
                 "resource_manager/record_type" = 'Transaction'
           LIMIT 1;
-[ RECORD 1 ]----------------+-------------------
resource_manager/record_type | Transaction
count                        | 2
count_percentage             | 8
record_size                  | 875
record_size_percentage       | 41.23468426013195
fpi_size                     | 0
fpi_size_percentage          | 0
combined_size                | 875
combined_size_percentage     | 2.8634072910530795
pg_get_wal_stats_till_end_of_wal(start_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record

Эта функция действует так же, как pg_get_wal_stats(), но получает статистику по всем корректным записям WAL с начального_lsn до конца WAL.

F.53.2. Автор

Бхарат Рупиредди (Bharath Rupireddy)