pg_amcheck
pg_amcheck — проверить одну или несколько БД PostgreSQL на предмет повреждения
Синтаксис
pg_amcheck [параметр...] [dbname]
Описание
Программа 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-деревьев. Он может обнаруживать не все или вовсе не обнаруживать те типы повреждений, которые встречаются на практике. Также в этом режиме проверка выполняется значительно дольше и для неё требуется больше серверных ресурсов. 
Предупреждение
Дополнительные проверки, выполняемые для индексов-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=- dbname
- Задаёт базу данных или строку подключения для установления подключения, через которое будет определяться список баз данных для проверки. Если не используются ни ключ - --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 и выше.