F.58. 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.58.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.58.2. Автор
Бхарат Рупиредди (Bharath Rupireddy) <bharath.rupireddyforpostgres@gmail.com>