pg_amcheck
pg_amcheck — проверить одну или несколько БД PostgreSQL на предмет повреждения
Синтаксис
pg_amcheck
[параметр
...] [имя_бд
]
Описание
Программа pg_amcheck поддерживает запуск реализованных в расширении amcheck функций, выявляющих повреждения, в одной или нескольких базах данных, с возможностью выбора проверяемых индексов, таблиц и схем. Она также позволяет выбрать, какие проверки будут выполняться, и запустить их в параллельном режиме (для которого задаётся число параллельных подключений).
В настоящее время поддерживаются только обычные табличные отношения, таблицы TOAST, материализованные представления, последовательности и индексы btree. Другие типы отношений просто пропускаются.
Если задаётся имя_бд
, это должно быть имя одной проверяемой базы данных, а никакие другие параметры выбора базы данных задаваться не должны. Если же, напротив, присутствуют параметры выбора баз данных, будут проверяться все соответствующие базы. В отсутствие этих параметров проверяться будет только база по умолчанию. Параметрами, выбирающими базы, являются --all
, --database
и --exclude-database
. Также в их число можно включить --relation
, --exclude-relation
, --table
, --exclude-table
, --index
и --exclude-index
, но только если их значения задаются тремя компонентами (например, mydb*.myschema*.myrel*
). И наконец, к таким параметрам можно отнести --schema
и --exclude-schema
, если их значения задаются двумя компонентами (например, mydb*.myschema*
).
В качестве параметра имя_бд
может также передаваться строка подключения.
Параметры
Следующие параметры командной строки определяют, что будет проверяться:
-a
--all
Проверить все базы данных (кроме исключённых аргументом
--exclude-database
).-d
шаблон
--database=
шаблон
Проверить базы данных, соответствующие заданному
шаблону
, кроме исключённых аргументом--exclude-database
. Этот параметр можно добавлять неоднократно.-D
шаблон
--exclude-database=
шаблон
Исключить базы данных, соответствующие заданному
шаблону
. Этот параметр можно добавлять неоднократно.-i
шаблон
--index=
шаблон
Проверить индексы, соответствующие заданному
шаблону
, если они не исключены каким-либо образом. Этот параметр можно добавлять неоднократно.Этот параметр подобен параметру
--relation
, но применяется только к индексам, а не к другим типам отношений.-I
шаблон
--exclude-index=
шаблон
Исключить индексы, соответствующие заданному
шаблону
. Этот параметр можно добавлять неоднократно.Этот параметр подобен параметру
--exclude-relation
, но применяется только к индексам, а не к другим типам отношений.-r
шаблон
--relation=
шаблон
Проверить отношения, соответствующие заданному
шаблону
, если они не исключены каким-либо образом. Этот параметр можно добавлять неоднократно.Шаблоны могут быть неполными, например
myrel*
, либо они могут задаваться с указанием схемы, напримерmyschema*.myrel*
, а также с указанием базы и схемы, напримерmydb*.myschema*.myrel*
. В случае указания шаблона с базой данных, все соответствующие базы будут добавлены в список баз, подлежащих проверке.-R
шаблон
--exclude-relation=
шаблон
Исключить отношения, соответствующие заданному
шаблону
. Этот параметр можно добавлять неоднократно.Как и с
--relation
,шаблон
может быть неполным или дополненным указанием схемы, а также указанием базы и схемы.-s
шаблон
--schema=
шаблон
Проверить таблицы и индексы в схемах, соответствующих заданному
шаблону
, если соответствующие объекты не исключены каким-либо образом. Этот параметр можно добавлять неоднократно.Чтобы проверить только таблицы в схемах, соответствующих определённому шаблону, можно указать в параметрах
--table=ШАБЛОН_СХЕМЫ.* --no-dependent-indexes
. Чтобы выбрать только индексы, можно воспользоваться указанием--index=ШАБЛОН_СХЕМЫ.*
.Шаблон схемы может содержать указание базы. Например, вы можете написать
--schema=mydb*.myschema*
, чтобы выбрать схемыmyschema*
в базах данных, соответствующих шаблонуmydb*
.-S
шаблон
--exclude-schema=
шаблон
Исключить таблицы и индексы в схемах, соответствующих заданному
шаблону
. Этот параметр можно добавлять неоднократно.Как и в параметре
--schema
, к шаблону можно добавить имя базы данных.-t
шаблон
--table=
шаблон
Проверить таблицы в схемах, соответствующих заданному
шаблону
, если соответствующие объекты не исключены каким-либо образом. Этот параметр можно добавлять неоднократно.Этот параметр подобен параметру
--relation
, но применяется только к таблицам, материализованным представлениям и последовательностям, а не к индексам.-T
шаблон
--exclude-table=
шаблон
Исключить таблицы, соответствующие заданному
шаблону
. Этот параметр можно добавлять неоднократно.Этот параметр подобен параметру
--exclude-relation
, но применяется только к таблицам, материализованным представлениям и последовательностям, а не к индексам.--no-dependent-indexes
По умолчанию, если проверяется таблица, также будут проверяться все индексы btree этой таблицы, даже если они не были явно выбраны ключами типа
--index
или--relation
. Данный параметр отключает это поведение.--no-dependent-toast
По умолчанию, если проверяется таблица, также будет проверяться её TOAST-таблица (если таковая имеется), даже если она не была явно выбрана ключами типа
--table
или--relation
. Данный параметр отключает это поведение.--no-strict-names
По умолчанию, если аргументу
--database
,--table
,--index
или--relation
не соответствуют никакие объекты, это считается критической ошибкой. С данным параметром уровень ошибки понижается до предупреждения.
Следующие параметры командной строки управляют методами проверки таблиц:
--exclude-toast-pointers
По умолчанию, когда в таблице встречается указатель на TOAST, осуществляется поиск записи в TOAST-таблице для проверки корректности указателя. Эти проверки могут быть довольно медленными, и данный параметр позволяет пропустить их.
--on-error-stop
Прекращать обработку табличного отношения сразу после сообщения обо всех повреждениях на первой повреждённой странице и переходить к следующей таблице или индексу.
Заметьте, что проверка индекса всегда прекращается после обнаружения первой повреждённой страницы. Данный параметр имеет смысл только для табличных отношений.
--skip=
параметр
С указанием
all-frozen
проверки повреждений таблиц будут пропускать страницы, помеченные как полностью замороженные, во всех таблицах.С указанием
all-visible
проверки повреждений таблиц будут пропускать страницы, помеченные как полностью видимые, во всех таблицах.По умолчанию никакие страницы не пропускаются. Такое поведение задаётся значением
none
, но так как это значение подразумевается, явно задавать его не требуется.--startblock=
блок
Начать проверку с блока с заданным номером. Если проверяемое табличное отношение содержит меньше заданного числа блоков, будет выдана ошибка. Данный параметр представляется полезным только для проверки одной конкретной таблицы, и он не действует на индексы. Дополнительные замечания приведены в описании
--endblock
.--endblock=
блок
Завершить проверку на блоке с указанным номером. Если проверяемое табличное отношение содержит меньше заданного числа блоков, будет выдана ошибка. Данный параметр представляется полезным только для проверки одной конкретной таблицы, и он не действует на индексы. Если проверяется и обычная, и TOAST-таблица, этот параметр действует на обе, но при проверке TOAST-указателей тем не менее возможны обращения к блокам за этим пределом, если только эта проверка не была выключена параметром
--exclude-toast-pointers
.
Следующие параметры командной строки управляют методами проверки индексов-B-деревьев:
--heapallindexed
Проверять для каждого обрабатываемого индекса наличие всех кортежей кучи в виде индексных кортежей с использованием режима
heapallindexed
проверки amcheck.--parent-check
Выполнять для каждого проверяемого индекса btree функцию amcheck
bt_index_parent_check
, проводящую дополнительные проверки связей родитель-потомок.По умолчанию выполняется функция amcheck
bt_index_check
, но заметьте, что в случае использования параметра--rootdescend
неявно выбирается функцияbt_index_parent_check
.--rootdescend
При проверке каждого индекса для каждого кортежа заново находить индексные кортежи на уровне листьев, производя поиск с корневой страницы, то есть задействовать режим amcheck
rootdescend
.При использовании данного параметра также неявно включается параметр
--parent-check
.Этот режим проверки изначально реализовывался как средство, полезное при разработке функциональности индексов-B-деревьев. Он может обнаруживать не все или вовсе не обнаруживать те типы повреждений, которые встречаются на практике. Также в этом режиме проверка выполняется значительно дольше и для неё требуется больше серверных ресурсов.
--checkunique
Проверить для каждого индекса с ограничением уникальности, что в нём нет одновременно видимых дубликатов, используя параметр
checkunique
в amcheck.
Предупреждение
Дополнительные проверки, выполняемые для индексов-B-деревьев, когда указан параметр --parent-check
или параметр --rootdescend
, требуют относительно сильных блокировок на уровне отношений. Только эти проверки блокируют одновременное изменение данных командами INSERT
, UPDATE
и DELETE
.
Следующие параметры командной строки управляют подключением к серверу:
-h
компьютер
--host=
компьютер
Указывает имя компьютера, на котором работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
-p
порт
--port=
порт
Указывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения.
-U
--username=
имя_пользователя
Имя пользователя, под которым производится подключение.
-w
--no-password
Не выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл
.pgpass
, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.-W
--password
Принудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как pg_amcheck запрашивает пароль автоматически, если сервер проверяет подлинность по паролю. Однако чтобы понять это, pg_amcheck лишний раз подключается к серверу. Поэтому иногда имеет смысл ввести
-W
, чтобы исключить эту ненужную попытку подключения.--maintenance-db=
имя_бд
Задаёт базу данных или строку подключения для установления подключения, через которое будет определяться список баз данных для проверки. Если не используются ни ключ
--all
, ни параметры, задающие шаблон имён проверяемых баз данных, такое подключение не требуется и данный параметр игнорируется. Иначе все параметры из переданной строки, за исключением имени базы данных, будут также использоваться при подключении к проверяемым базам. Если этот параметр опущен, выполняется подключение к базеpostgres
, а если к ней подключиться не удаётся — к базеtemplate1
.
Другие параметры:
-e
--echo
Выводить в stdout все SQL-запросы, передаваемые серверу.
-j
число
--jobs=
число
Использовать заданное
число
одновременных подключений к серверу, а если оно превышает количество объектов, число подключений ограничивается этим количеством.По умолчанию используется одно подключение.
-P
--progress
Выводить информацию о прогрессе операции. Выводимая информация включает количество отношений, для которых была проведена проверка, и общий размер этих отношений. В неё также включается общее количество отношений, которые должны быть проверены, и примерный размер этих отношений.
-v
--verbose
Выводить больше сообщений. В частности, будут выводиться сообщения о проверке каждого отношения, а также увеличится уровень детализации ошибок сервера.
-V
--version
Вывести версию pg_amcheck и завершиться.
--install-missing
--install-missing=
схема
Установить все отсутствующие расширения, которые требуются для проверки баз(ы) данных. Если это расширение не было установлено, его объекты будут помещены в заданную
схему
или, если она не задана, в схемуpg_catalog
.В настоящее время для работы pg_amcheck требуется только расширение amcheck.
-?
--help
Вывести справку об аргументах командной строки pg_amcheck и завершиться.
Примечания
Программа pg_amcheck предназначена для работы с PostgreSQL 14.0 и выше.