pg_resetxlog

Название

pg_resetxlog -- сбросить журнал упреждающей записи и другую управляющую информацию кластера PostgreSQL

Синтаксис

pg_resetxlog [-c xid,xid] [ -f ] [ -n ] [-o oid] [-x xid] [-e xid_epoch] [-m mxid,mxid] [-O mxoff] [-l xlogfile] {[-D] datadir}

Описание

pg_resetxlog очищает журнал упреждающей записи (WAL) и может сбросить некоторую другую управляющую информацию, хранящуюся в файле pg_control. Данная функция может быть востребована при повреждении этих файлов. Использовать её нужно только как крайнюю меру, когда запуск сервера оказывается невозможен из-за этого повреждения.

После выполнения этой команды запуск сервера, скорее всего, будет возможен, однако стоит учитывать, что база данных может содержать несогласованные данные из-за транзакций, зафиксированных частично. Вы должны немедленно выгрузить данные, выполнить initdb, а затем восстановить данные. После этого проверьте целостность базы и внесите необходимые исправления.

Эту утилиту может запускать только пользователь, установивший сервер, так как ей нужны права записи/чтения в каталоге хранения данных кластера. В целях безопасности каталог необходимо указывать в командной строке. pg_resetxlog не поддерживает переменную окружения PGDATA.

Если pg_resetxlog выводит сообщение о невозможности определить данные из pg_control, то команду можно запустить принудительно, указав -f. В этом случае будут использованы наиболее вероятные значения. Для большинства полей это нормально, но для некоторых может потребоваться явное указание: следующее значение OID, следующее значение ID транзакции и времени, ID мультитранзакции и смещение, начальный адрес WAL. Эти значения можно указать с помощью далее описанных параметров. Если их невозможно определить, то флаг f позволяет это обойти, однако, достоверность данных восстановленной базы останется под сомнением: незамедлительная выгрузка с последующим восстановлением данных крайне необходимы. Не выполняйте никаких операций модификации до создания дампа данных, так как это может привести к ещё более печальным последствиям.

Чтобы указать значения следующих OID, ID транзакции, времени транзакции, ID мультитранзакции, смещения мультитранзакции, ID старейшей и новейшей транзакций, для которых можно получить время фиксации, и начального адреса WAL, используются соответственно параметры -o, -x, -e, -m, -O, -c и -l. Это требуется, когда pg_resetxlog не может самостоятельно определить подходящие значения, прочитав файл pg_control. Безопасные значения можно получить следующим образом:

С флагом -n (нет операции) команда pg_resetxlog отображает извлечённые из pg_control данные, а также значения, которые можно изменить. Режим полезен для отладки и тестирования предстоящей операции без реального применения изменений.

Флаги -V и --version выводят версию pg_resetxlog и прерывают дальнейшее выполнение. Ключи -? и --help выводят справку по поддерживаемым аргументам.

Замечания

Команду нельзя выполнять на работающем сервере. pg_resetxlog отклонит выполнение при обнаруженном блокирующем файле в каталоге хранения данных. Иногда при аварии сервера блокирующий файл может остаться в системе. В этом случае необходимо самостоятельно удалить его, чтобы дать возможность pg_resetxlog отработать. Перед выполнением операции дважды убедитесь, что сервер остановлен.

pg_resetxlog работает только с серверами той же основной версии.