支持的版本: 当前 (17) / 16 / 15 / 14
开发版本: devel

pg_amcheck

pg_amcheck — 检查一个或多个 PostgreSQL 数据库中的损坏

概要

pg_amcheck [选项...] [数据库名]

描述

pg_amcheck 支持针对一个或多个数据库运行 amcheck 的损坏检查功能,并提供选项来选择要检查的模式、表和索引,要执行的检查类型,以及是否并行执行检查,如果并行执行,则指定要建立和使用的并行连接数。

目前仅支持普通表和 TOAST 表关系、物化视图、序列和 B 树索引。其他关系类型将被静默跳过。

如果指定了 数据库名,则它应该是要检查的单个数据库的名称,并且不应存在其他数据库选择选项。否则,如果存在任何数据库选择选项,将检查所有匹配的数据库。如果没有此类选项,将检查默认数据库。数据库选择选项包括 --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=SCHEMAPAT.* --no-dependent-indexes 的选项。要仅选择索引,请考虑使用类似 --index=SCHEMAPAT.* 的选项。

模式模式可以是数据库限定的。例如,您可以编写 --schema=mydb*.myschema* 来选择与 mydb* 匹配的数据库中与 myschema* 匹配的模式。

-S 模式
--exclude-schema=模式

排除与指定 模式 匹配的模式中的表和索引。此选项可以多次指定。

--schema 一样,该模式可以是数据库限定的。

-t 模式
--table=模式

检查与指定 模式 匹配的表,除非它们被以其他方式排除。此选项可以多次指定。

这类似于 --relation 选项,但它仅适用于表、物化视图和序列,而不适用于索引。

-T 模式
--exclude-table=模式

排除与指定 模式 匹配的表。此选项可以多次指定。

这类似于 --exclude-relation 选项,但它仅适用于表、物化视图和序列,而不适用于索引。

--no-dependent-indexes

默认情况下,如果检查一个表,则也会检查该表的任何 B 树索引,即使它们未通过诸如 --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 指针时,仍然可以访问更高编号的 TOAST 块,除非使用 --exclude-toast-pointers 抑制这种情况。

以下命令行选项控制 B 树索引的检查

--checkunique

对于每个具有唯一约束的被检查索引,使用 amcheckcheckunique 选项验证在重复条目中是否只有一个在索引中可见。

--heapallindexed

对于每个被检查的索引,使用 amcheckheapallindexed 选项验证所有堆元组在索引中是否作为索引元组存在。

--parent-check

对于每个被检查的 btree 索引,使用 amcheckbt_index_parent_check 函数,该函数在索引检查期间执行父/子关系的额外检查。

默认是使用 amcheckbt_index_check 函数,但请注意,使用 --rootdescend 选项会隐式选择 bt_index_parent_check

--rootdescend

对于每个被检查的索引,使用 amcheckrootdescend 选项,通过从根页面为每个元组执行新的搜索来重新查找叶子级别的元组。

使用此选项还会隐式选择 --parent-check 选项。

这种形式的验证最初是为了帮助开发 btree 索引功能而编写的。在帮助检测实践中发生的各种损坏方面,它的用途可能有限,甚至可能毫无用处。它还可能导致损坏检查花费更长的时间,并在服务器上消耗更多的资源。

警告

当指定 --parent-check 选项或 --rootdescend 选项时,针对 B 树索引执行的额外检查需要相对强的关系级锁。这些检查是唯一会阻止 INSERTUPDATEDELETE 命令并发修改数据的检查。

以下命令行选项控制与服务器的连接

-h 主机名
--host=主机名

指定服务器正在运行的计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。

-p 端口
--port=端口

指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。

-U
--username=用户名

要连接的用户名。

-w
--no-password

从不发出密码提示。如果服务器需要密码身份验证,并且无法通过其他方式(例如 .pgpass 文件)获得密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。

-W
--password

强制 pg_amcheck 在连接到数据库之前提示输入密码。

此选项并非必要,因为如果服务器需要密码身份验证,pg_amcheck 会自动提示输入密码。但是,pg_amcheck 会浪费一次连接尝试来找出服务器是否需要密码。在某些情况下,值得输入 -W 来避免额外的连接尝试。

--maintenance-db=数据库名

指定一个数据库或 连接字符串,用于发现要检查的数据库列表。如果未使用 --all 或任何包含数据库模式的选项,则不需要此类连接,并且此选项不起作用。否则,此选项的值中包含的数据库名称以外的任何连接字符串参数也将在连接到正在检查的数据库时使用。如果省略此选项,则默认为 postgres,如果失败,则为 template1

还提供其他选项

-e
--echo

将发送到服务器的所有 SQL 回显到 stdout。

-j 数量
--jobs=数量

使用 数量 个并发连接到服务器,或每个要检查的对象一个,以较少者为准。

默认是使用单个连接。

-P
--progress

显示进度信息。进度信息包括已完成检查的关系数量以及这些关系的总大小。它还包括最终将要检查的关系总数以及这些关系的估计大小。

-v
--verbose

打印更多消息。特别是,这将为每个正在检查的关系打印消息,并增加服务器错误显示的详细程度。

-V
--version

打印 pg_amcheck 版本并退出。

--install-missing
--install-missing=模式

安装检查数据库所需的任何缺失的扩展。如果尚未安装,则每个扩展的对象将安装到给定的 模式 中,如果未指定,则安装到 pg_catalog 模式中。

目前,唯一需要的扩展是 amcheck

-?
--help

显示有关 pg_amcheck 命令行参数的帮助,然后退出。

环境

像大多数其他 PostgreSQL 实用程序一样,pg_amcheck 也使用 libpq 支持的环境变量(请参见 第 32.15 节)。

环境变量 PG_COLOR 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

注意

pg_amcheck 旨在与 PostgreSQL 14.0 及更高版本一起使用。

另请参见

amcheck

提交更正

如果您在文档中看到任何不正确、与特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。