9.3 9.4 9.5 9.6 10 11 12 13 14
阿里云PostgreSQL 问题报告 纠错本页面

pg_amcheck

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

大纲

pg_amcheck [option...] [dbname]

Description

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

当前仅支持表关系和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

排除与指定的pattern匹配的索引。可以多次指定此选项。

这类似于--exclude-relation选项,只是它只适用于索引,而不适用于表。

-r pattern
--relation=pattern

检查与指定的pattern匹配的关系,除非它们被排除在外。可以多次指定此选项。

模式可能是非限定的,例如myrel*,或者它们可能是模式限定的,如myschema*.myrel*或数据库限定和模式限定,例如mydb*.myscheam*.myrel*。数据库限定模式将向要检查的数据库列表中添加匹配的数据库。

-R pattern
--exclude-relation=pattern

排除与指定的pattern匹配的关系。可以多次指定此选项。

As with --relation, the pattern may be unqualified, schema-qualified, or database- and schema-qualified. 与--relation一样,pattern可以是非限定的、模式限定的或数据库和模式限定的。

-s pattern
--schema=pattern

检查模式中与指定的pattern匹配的表和索引,除非另有排除。可以多次指定此选项。

要仅选择与特定模式匹配的模式中的表,请考虑使用类似--table=SCHEMAPAT.* --no-dependent-indexes。要仅选择索引,请考虑使用类似--index=SCHEMAPAT.*的方法。

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

-S pattern
--exclude-schema=pattern

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

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

-t pattern
--table=pattern

检查与指定的pattern匹配的表,除非它们被排除在外。可以多次指定此选项。

这类似于--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's heapallindexed选项验证索引中是否存在作为索引元组的所有堆元组。

--parent-check

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

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

--rootdescend

对于每个选中的索引,通过使用amcheck's rootdescend选项从根页面对每个元组执行新搜索,在叶级重新查找元组。

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

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

警告

当指定--parent-check选项或--rootdescend选项时,对B树索引执行的额外检查需要相对强的关系级锁。这些检查是唯一会阻止INSERTUPDATE,和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

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

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

-?
--help

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

Notes

pg_amcheck被设计运行于 PostgreSQL 14.0及以上版本。

See Also

amcheck