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=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
默认情况下,如果检查表,则还会检查该表的任何 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 指针时仍可能会访问更高编号的 toast 块,除非使用 --exclude-toast-pointers
抑制了这一点。
以下命令行选项控制对 B 树索引的检查
--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 树索引功能而编写的。它在帮助检测实际发生的那种损坏方面可能用途有限,甚至没有用。它还可能导致损坏检查花费更长的时间,并在服务器上消耗更多资源。
当指定 --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 语句回显到标准输出。
-j num
--jobs=num
使用 num
个并发连接到服务器,或每个要检查的对象一个连接,取较小者。
默认情况下使用单个连接。
-P
--progress
显示进度信息。进度信息包括已完成检查的关系数量以及这些关系的总大小。它还包括最终将被检查的关系总数以及这些关系的估计大小。
-v
--verbose
打印更多消息。特别是,这将为正在检查的每个关系打印一条消息,并将提高显示的服务器错误的详细程度。
-V
--version
打印 pg_amcheck 版本并退出。
--install-missing
--install-missing=schema
安装检查数据库(s)所需的任何缺少的扩展。如果尚未安装,则每个扩展的对象将安装到给定的 schema
中,或者如果没有指定,则安装到模式 pg_catalog
中。
目前,唯一必需的扩展是 amcheck。
-?
--help
显示有关 pg_amcheck 命令行参数的帮助,并退出。
pg_amcheck
与大多数其他 PostgreSQL 实用程序一样,也使用 libpq 支持的环境变量(参见 第 32.15 节)。
环境变量 PG_COLOR
指定是否在诊断消息中使用颜色。可能的值是 always
、auto
和 never
。
pg_amcheck 旨在与 PostgreSQL 14.0 及更高版本一起使用。
如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。