Модуль 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.
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.
Бхарат Рупиредди (Bharath Rupireddy) <bharath.rupireddyforpostgres@gmail.com>