pg_resetwal
Эта страница переведена при помощи нейросети GigaChat.
pg_resetwal — очищает журнал предварительной записи и другую управляющую информацию кластера баз данных PostgreSQL.
Синтаксис
pg_resetwal [-f | --force] [-n | --dry-run] [option...] [-D | --pgdata] datadir
Описание
pg_resetwal очищает журнал предзаписи (WAL) и при необходимости сбрасывает другую управляющую информацию, хранящуюся в файле pg_control. Это может потребоваться в случае повреждения этих файлов. Использование этой утилиты оправдано только в крайних случаях, когда запуск сервера невозможен из-за такого повреждения.
После выполнения команды можно попытаться запустить сервер, однако важно понимать, что база данных может содержать несогласованные данные из-за незавершенных транзакций. Рекомендуется немедленно выгрузить данные, повторно инициализировать кластер с помощью initdb, восстановить данные и тщательно проверить их на целостность и ошибки.
Утилиту можно запускать только от имени пользователя, установившего сервер, поскольку она требует прав на чтение и запись в каталог данных. По соображениям безопасности путь к каталогу с данными необходимо указывать явно в командной строке — pg_resetwal не использует переменную окружения PGDATA.
Если утилита не может определить корректные значения из файла pg_control, выполнение можно принудительно продолжить с помощью параметра -f, что приведет к подстановке разумных по умолчанию значений. При этом важно вручную проверить и при необходимости задать следующие параметры: следующее значение OID, ID и эпоха следующей транзакции, ID мультитранзакции и смещение и начальное местоположение WAL. Эти значения можно указать с помощью описанных далее параметров. Если их невозможно определить, то параметр f позволяет это обойти. Если точные значения неизвестны, базу после восстановления следует считать потенциально нестабильной — перед любыми изменениями необходимо немедленно создать резервную копию. Не выполняйте никаких операций изменения данных в базе данных перед созданием дампа, поскольку любое такое действие, вероятно, усугубит повреждение.
Параметры
Для утилиты pg_resetwal существуют следующие параметры командной строки:
-f--force
Принудительно выполняет pg_resetwal, даже если невозможно корректно прочитать данные из pg_control, как описано выше.
-n--dry-run
Инструктирует pg_resetwal только отобразить реконструированные значения из pg_control и значения, которые будут изменены, без внесения каких-либо изменений. Режим полезен для отладки и предварительной проверки перед запуском с изменениями.
-V--version
Выводит версию pg_resetwal и завершается.
-?--help
Показывает справку о параметрах командной строки утилиты pg_resetwal и завершается.
Следующие параметры необходимы только тогда, когда pg_resetwal не может определить подходящие значения, читая pg_control. Безопасные значения могут быть определены следующим образом. Для значений, которые принимают числовые аргументы, шестнадцатеричные значения можно указать, используя префикс 0x.
-c xid, xid--commit-timestamp-ids=xid, xid
Устанавливает вручную наименьший и наибольший идентификаторы транзакций, для которых доступна информация о времени фиксации.
Первое значение — самый старый XID, второе — самый новый. Безопасные значения можно получить, проанализировав численно минимальное и максимальное имя файла в каталоге pg_commit_ts под каталогом данных. Эти имена файлов представлены в шестнадцатеричной системе счисления.
-e xid_epoch--epoch=xid_epoch
Устанавливает вручную значение эпохи для идентификаторов транзакций.
Это значение не хранится в базе данных явно, кроме как в поле, которое изменяет pg_resetwal. Любое значение будет допустимо с точки зрения PostgreSQL, но может потребоваться корректное значение при использовании систем репликации (например, Slony-I или Skytools), и тогда его следует получить из состояния реплицируемой базы.
-l walfile--next-wal-file=walfile
Задает имя следующего файла WAL-сегмента.
Указанное имя должно быть больше любого имени файла, находящегося в каталоге pg_wal. Имя имеет формат XXXXXXXXYYYYYYYYZZZZZZZZ, где каждая часть представлена в шестнадцатеричной системе:
- первая часть — идентификатор линии времени;
- вторая — логическая часть номера;
- третья — физическая часть номера.
Например, если максимальный файл — 00000001000000320000004A, можно использовать -l 00000001000000320000004B или выше.
Хотяpg_resetwal по умолчанию сам определяет следующее имя WAL-файла на основе содержимого pg_wal, ручная установка может понадобиться, если часть файлов WAL отсутствует или каталог pg_wal утерян. Также при нестандартных размерах сегментов имена WAL-файлов могут не совпадать с LSN (логическими номерами), отображаемыми в системных представлениях.
-m mxid, mxid--multixact-ids=mxid, mxid
Устанавливает следующий и самый старый допустимый ID мультитранзакции.
Безопасные значения определяются на основе содержимого каталога pg_multixact/offsets:
- следующего ID мультитранзакции — путем нахождения самого большого имени файла, прибавления 1 и умножения на 65536 (0x10000);
- самого старого ID — по самому маленькому имени файла, также умноженному на 65536.
Все имена файлов в этом каталоге — шестнадцатеричные.
-o oid--next-oid=oid
Устанавливает следующий OID вручную.
Точное определение корректного значения затруднено, но важно лишь, чтобы оно было выше всех используемых в базе. Некорректное значение не приводит к фатальным ошибкам.
-O mxoff--multixact-offset=mxoff
Устанавливает следующий сдвиг мультитранзакции вручную.
Безопасное значение можно вычислить, найдя численно максимальное имя файла в каталоге pg_multixact/members, прибавив единицу и умножив на 52352 (0xCC80).
Формат имен — шестнадцатеричный. Универсального правила для добавления нулей, как у других параметров, здесь нет.
--wal-segsize=wal_segment_size
Устанавливает размер сегмента WAL в мегабайтах.
Значение должно быть степенью двойки от 1 до 1024. Подробности представлены в описании параметра --wal-segsize утилиты initdb.
При изменении размера WAL-сегмента возможно совпадение новых имен WAL-файлов с ранее существовавшими. В таких случаях рекомендуется использовать параметр-l для явного задания следующего имени WAL-сегмента, чтобы избежать конфликтов, особенно в конфигурациях с архивированием.
-u xid--oldest-transaction-id=xid
Устанавливает самый старый незамерзающий идентификатор транзакции.
Безопасное значение можно получить, найдя имя файла с минимальным значением в каталоге pg_xact и умножив его на 1048576 (0x100000). Имена файлов — шестнадцатеричные. Для удобства рекомендуется указывать значение также в шестнадцатеричной форме, добавляя пять нулей. Например, если имя файла — 0007, используйте -u 0x700000.
-x xid--next-transaction-id=xid
Устанавливает следующий идентификатор транзакции.
Безопасное значение можно определить по максимальному имени файла в каталоге pg_xact, прибавив 1 и умножив на 1048576 (0x100000). Например, если максимальный файл — 0011, параметр -x 0x1200000 будет допустим.
Переменные окружения
Утилита поддерживает переменные окружения:
PG_COLOR
Указывает, использовать ли цвет в диагностических сообщениях. Возможные значения — always, auto и never.
Примечания
Эту утилиту нельзя запускать, пока сервер работает. Если в каталоге данных обнаружен файл блокировки сервера, pg_resetwal откажется выполняться. В случае аварийного завершения работы сервера такой файл может остаться. Тогда можно удалить его вручную, чтобы разрешить запуск pg_resetwal, но прежде обязательно убедитесь, что сервер действительно не запущен.
pg_resetwal совместима только с серверами той же основной версии, что и сама утилита.