pg_amcheck — 检查一个或多个 PostgreSQL 数据库的损坏情况
pg_amcheck
[选项
...] [数据库名
]
pg_amcheck 支持针对一个或多个数据库运行 amcheck 的损坏检查功能,并提供选项来选择要检查的模式、表和索引、要执行的检查类型,以及是否并行执行检查,如果是,则建立和使用的并行连接数。
目前仅支持普通表和 TOAST 表关系、物化视图、序列和 btree 索引。其他关系类型将被静默跳过。
如果指定了 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
排除与指定 模式
匹配的索引。此选项可以指定多次。
这类似于 --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*
以选择与 myschema*
匹配的模式,在与 mydb*
匹配的数据库中。
-S 模式
--exclude-schema=模式
排除与指定 模式
匹配的模式中的表和索引。此选项可以指定多次。
与 --schema
一样,模式可以是数据库限定的。
-t 模式
--table=模式
检查与指定 模式
匹配的表,除非它们被排除在外。此选项可以指定多次。
这类似于 --relation
选项,不同之处在于它仅适用于表、物化视图和序列,不适用于索引。
-T pattern
--exclude-table=pattern
排除与指定 pattern
匹配的表。此选项可以指定多次。
这类似于 --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=option
如果给定 all-frozen
,表损坏检查将跳过标记为全部冻结的所有表中的页面。
如果指定了 all-visible
,表损坏检查将跳过所有表中标记为全部可见的页面。
默认情况下,不跳过任何页面。这可以指定为 none
,但由于这是默认值,因此不必提及。
--startblock=block
从指定的块号开始检查。如果正在检查的表关系的块数少于此数字,则会发生错误。此选项不适用于索引,并且可能仅在检查单个表关系时有用。有关更多注意事项,请参见 --endblock
。
--endblock=block
在指定的块号处结束检查。如果正在检查的表关系的块数少于此数字,则会发生错误。此选项不适用于索引,并且可能仅在检查单个表关系时有用。如果检查常规表和 TOAST 表,此选项将同时应用于两者,但仍可能会在验证 TOAST 指针时访问编号较高的 TOAST 块,除非使用 --exclude-toast-pointers
禁止这样做。
以下命令行选项控制 B 树索引的检查
--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
选项。
此验证形式最初是为了帮助开发 btree 索引功能而编写的。在帮助检测实际发生的损坏类型方面,它可能用处有限,甚至毫无用处。它还可能导致损坏检查花费更长的时间,并消耗服务器上的更多资源。
当指定 --parent-check
选项或 --rootdescend
选项时,针对 B 树索引执行的额外检查需要相对较强的关系级别锁。这些检查是唯一会阻止来自 INSERT
、UPDATE
和 DELETE
命令的并发数据修改的检查。
以下命令行选项控制与服务器的连接
-h hostname
--host=hostname
指定服务器正在运行的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。
-p port
--port=port
指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。
-U
--username=username
连接时使用的用户名。
-w
--no-password
从不发出密码提示。如果服务器需要密码身份验证,并且无法通过其他方式(例如 .pgpass
文件)获得密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。
-W
--password
强制 pg_amcheck 在连接到数据库之前提示输入密码。
此选项永远不是必需的,因为如果服务器要求密码身份验证,pg_amcheck 会自动提示输入密码。但是,pg_amcheck 会浪费一次连接尝试来找出服务器是否需要密码。在某些情况下,值得键入 -W
以避免额外的连接尝试。
--maintenance-db=dbname
指定一个数据库或 连接字符串,用于发现要检查的数据库列表。如果既未使用 --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 14.0 及更高版本配合使用。