pg_amcheck — 检查一个或多个 PostgreSQL 数据库的损坏情况
pg_amcheck
[选项
...] [数据库名称
]
pg_amcheck 支持对一个或多个数据库运行 amcheck 损坏检查函数,提供用于选择要检查的架构、表和索引、要执行的检查类型以及是否并行执行检查(如果要并行执行检查,还可设置要建立并使用的并行连接数)的选项。
目前仅支持普通和 TOAST 表关系、物化视图、序列和 B 树索引。其他关系类型将被自动跳过。
如果指定了 dbname
,它应该是要检查的单个数据库的名称,并且不应该存在其他数据库选择选项。否则,如果存在任何数据库选择选项,将检查所有匹配的数据库。如果不存在这样的选项,将检查默认数据库。数据库选择选项包括 --all
、--database
和 --exclude-database
。它们还包括 --relation
、--exclude-relation
、--table
、--exclude-table
、--index
和 --exclude-index
,但仅当这些选项与三部分模式一起使用时(例如:mydb*.myschema*.myrel*
)。最后,它们包括 --schema
和 --exclude-schema
,当这些选项与两部分模式一起使用时(例如: mydb*.myschema*
)。
dbname
还可以是 连接字符串。
以下命令行选项控制检查的内容
-a
--all
检查所有数据库,除了通过 --exclude-database
排除的数据库。
-d pattern
--database=pattern
检查与指定的 pattern
匹配的数据库,除了被 --exclude-database
排除的数据库。此选项可以指定多次。
-D pattern
--exclude-database=pattern
排除与给定 pattern
匹配的数据库。此选项可以指定多次。
-i pattern
--index=pattern
检查与指定的 pattern
匹配的索引,除非它们被排除。此选项可以指定多次。
这类似于 --relation
选项,只是它仅适用于索引,而不适用于其他关系类型。
-I pattern
--exclude-index=pattern
排除与指定的 pattern
匹配的索引。此选项可以指定多次。
这类似于 --exclude-relation
选项,但它仅适用于索引,而不适用于其他关系类型。
-r pattern
--relation=pattern
除非已将匹配指定 pattern
的关系排除,否则检查这些关系。此选项可以指定多次。
模式可以是不限定的,例如 myrel*
,也可以是模式限定的,例如 myschema*.myrel*
或数据库限定和模式限定,例如 mydb*.myschema*.myrel*
。数据库限定模式会向待检查数据库列表中添加匹配数据库。
-R pattern
--exclude-relation=pattern
排除与指定 pattern
匹配的关系。此选项可以指定多次。
与 --relation
一样,pattern
可以是不限定的、模式限定的或数据库和模式限定的。
-s pattern
--schema=pattern
除非已将匹配指定 pattern
模式中的表和索引排除,否则检查这些表和索引。此选项可以指定多次。
若要只选择匹配特定模式的表,可以考虑使用类似于 --table=SCHEMAPAT.* --no-dependent-indexes
的选项。若要只选择索引,可以考虑使用类似于 --index=SCHEMAPAT.*
的选项。
模式模式可以是数据库限定的。例如,可以编写 --schema=mydb*.myschema*
以在匹配 myschema*
的数据库中选择匹配 mydb*
的模式。
-S pattern
--exclude-schema=pattern
排除匹配指定 pattern
模式中的表和索引。此选项可以指定多次。
与 --schema
一样,该模式可以是数据库限定的。
-t pattern
--table=pattern
除非已将匹配指定 pattern
的表排除,否则检查这些表。此选项可以指定多次。
这类似于 --relation
选项,但它仅适用于表、物化视图和序列,而不适用于索引。
-T 模式
--exclude-table=模式
排除与指定的 模式
相匹配的表。此选项可以被指定多次。
这类似于 --exclude-relation
选项,但它只适用于表、物化视图和序列,而不适用于索引。
--no-dependent-indexes
默认情况下,如果检查一张表,即使它们没有通过诸如 --index
或 --relation
之类的选项被明确选择出来,那么该表的任何 btree 索引也将被检查。此选项抑制该行为。
--no-dependent-toast
默认情况下,如果检查一张表,即使它没有通过诸如 --table
或 --relation
之类的选项被明确选择出来,那么它的 toast 表(如果存在)也将被检查。此选项抑制该行为。
--no-strict-names
默认情况下,如果 --database
、--table
、--index
或 --relation
的一个参数与任何对象不匹配,这会是一个致命错误。此选项将该错误降级为一个警告。
以下命令行选项控制对表的检查
--exclude-toast-pointers
默认情况下,当在表中遇到一个 toast 指针时,将执行一个查找,以确保它引用 toast 表中明显有效的条目。这些检查可能会相当慢,此选项可用于跳过它们。
--on-error-stop
在报告发现损坏的第一页表中的所有损坏之后,停止处理该表关系并继续处理下一张表或索引。
请注意,索引检查总是在第一个损坏的页面之后停止。此选项仅相对于表关系有意义。
--skip=option
如果给出 all-frozen
,表损坏检查将跳过所有表中标记为全冻结的页面。
如果给出 all-visible
,表损坏检查将跳过所有表中标记为全可见的页面。
默认情况下,没有页面被跳过。这可以指定为 none
,但由于这是默认值,因此无需提及它。
--startblock=块
从指定块号开始检查。如果被检查的表关系块数少于该数字,将出现错误。此选项不适用于索引,并且可能仅在检查单个表关系时有用。有关更多警告信息,请参见 --endblock
。
--endblock=block
在指定块号处结束检查。如果被检查的表关系块数少于该数字,将出现错误。此选项不适用于索引,并且可能仅在检查单个表关系时有用。如果要检查常规表和吐司表,此选项将应用于两者,但在验证吐司指针时仍可能访问较高编号的吐司块,除非使用 --exclude-toast-pointers
禁止访问。
以下命令行选项控制 B-tree 索引的检查
--checkunique
对于检查具有唯一约束的每个索引,使用 amcheck 的 checkunique
选项,验证索引中重复条目中只有一个可见。
--heapallindexed
对于检查的每个索引,使用 amcheck 的 heapallindexed
选项,验证索引中的所有堆元组作为索引元组存在于索引中。
--parent-check
对于检查的每个 btree 索引,使用 amcheck 的 bt_index_parent_check
函数,在索引检查过程中执行父/子关系的其他检查。
默认使用 amcheck 的 bt_index_check
函数,但请注意,使用 --rootdescend
选项会隐式选择 bt_index_parent_check
。
--rootdescend
对于检查的每个索引,使用 amcheck 的 rootdescend
选项,通过从根页为每个元组执行新搜索重新查找叶级别上的元组。
使用此选项还会隐式选择 --parent-check
选项。
这种形式的验证最初是为了帮助 B-tree 索引功能的开发而编写的。它可能用处不大,甚至无法帮助检测实际发生的损坏类型。它还可能导致损坏检查时间长得多,并消耗服务器上的更多资源。
在使用 --parent-check
选项或 --rootdescend
选项时,为 B 树索引执行的额外检查需要较强级别的关系级别锁。这些是将会封锁来自 INSERT
、UPDATE
和 DELETE
命令的并发数据修改的唯一检查。
以下命令行选项将控制与服务器的连接
-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 num
--jobs=num
使用 num
个到服务器的并发连接,或者使用待检查对象的每连接一个,以较少者为准。
默认情况下使用单个连接。
-P
--progress
显示进度信息。进度信息包括已完成检查的关系数和这些关系的总大小。它还包括将最终检查的关系总数和这些关系的估计大小。
-v
--verbose
打印更多消息。具体而言,这将打印每个正在检查的关系的消息,并将增加服务器错误的详细程度。
-V
--version
打印 pg_amcheck 版本并退出。
--install-missing
--install-missing=schema
安装检查数据库所需的任何缺失扩展。如果尚未安装,每个扩展的对象都将安装到给定的 schema
中,如果未指定,则安装到架构 pg_catalog
中。
目前,唯一的必需扩展是 amcheck。
-?
--help
显示有关 pg_amcheck 命令行参数的帮助信息并退出。
pg_amcheck
与大多数其他 PostgreSQL 实用程序一样,也使用 libpq 支持的环境变量(请参见第 32.15 节)。
环境变量 PG_COLOR
指定是否在诊断消息中使用颜色。可能的值为 always
、auto
和 never
.
pg_amcheck 专为 PostgreSQL 14.0 及更高版本设计。