app-pgamcheck.md 10.2 KB
Newer Older
李少辉-开发者's avatar
李少辉-开发者 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
## pg\_安切克

pg_amcheck-检查一个或多个PostgreSQL数据库中的损坏情况

## 提要

`pg_amcheck` [*`选项`*...][*`dbname`*]

## 描述

pg_amcheck支持运行[安切克](amcheck.html)的损坏检查功能针对一个或多个数据库,可以选择要检查的模式、表和索引、要执行的检查类型、是否并行执行检查,以及如果是,要建立和使用的并行连接数。

目前只支持表关系和btree索引。其他关系类型会自动跳过。

如果`库名`指定时,它应该是要检查的单个数据库的名称,并且不应存在其他数据库选择选项。否则,如果存在任何数据库选择选项,将检查所有匹配的数据库。如果不存在此类选项,将检查默认数据库。数据库选择选项包括`--全部`,`--数据库``--排除数据库`.它们还包括`--关系`,`--排除关系`,`--桌子`, `--排除表`, `--索引``--排除索引`,但仅当此类选项与三部分模式一起使用时(例如。`mydb*。myschema*。米雷尔*`).最后,它们包括`--模式``--排除模式`当此类选项与两部分模式一起使用时(例如。`mydb*。我的模式*`).

*`库名`*也可以是[连接字符串](libpq-connect.html#LIBPQ-CONNSTRING).

## 选项

以下命令行选项控制选中的内容:

`-a`\
`--全部`

检查所有数据库,但排除的任何数据库除外`--排除数据库`.

`-d*`图案`*`\
`--数据库=*`图案`*`

检查与指定数据库匹配的数据库[*`图案`*](app-psql.html#APP-PSQL-PATTERNS),但`--排除数据库`。可以多次指定此选项。

`-D*`图案`*`\
`--排除数据库=*`图案`*`

排除与给定[*`图案`*](app-psql.html#APP-PSQL-PATTERNS)。可以多次指定此选项。

`-我*`图案`*`\
`--索引=*`图案`*`

检查与指定索引匹配的索引[*`图案`*](app-psql.html#APP-PSQL-PATTERNS),除非另有规定。可以多次指定此选项。

这类似于`--关系`选项,但它仅适用于索引,而不适用于表。

`-我*`图案`*`\
`--排除索引=*`图案`*`

排除与指定索引匹配的索引[*`图案`*](app-psql.html#APP-PSQL-PATTERNS)。可以多次指定此选项。

这类似于`--排除关系`选项,但它仅适用于索引,而不适用于表。

`-r*`图案`*`\
`--关系=*`图案`*`

检查与指定属性匹配的关系[*`图案`*](app-psql.html#APP-PSQL-PATTERNS),除非另有规定。可以多次指定此选项。

图案可能不合格,例如:。`米雷尔*`,或者它们可能是符合模式的,例如。`myschema*。米雷尔*`或者数据库限定和模式限定,例如。`mydb*。myscheam*。米雷尔*`。符合数据库条件的模式会将匹配的数据库添加到要检查的数据库列表中。

`-R*`图案`*`\
`--排除关系=*`图案`*`

排除与指定对象匹配的关系[*`图案`*](app-psql.html#APP-PSQL-PATTERNS)。可以多次指定此选项。

就像`--关系`这个[*`图案`*](app-psql.html#APP-PSQL-PATTERNS)可以是不合格的、模式合格的或数据库和模式合格的。

`-s*`图案`*`\
`--模式=*`图案`*`

检查模式中与指定值匹配的表和索引[*`图案`*](app-psql.html#APP-PSQL-PATTERNS),除非另有规定。可以多次指定此选项。

若要仅选择与特定模式匹配的架构中的表,请考虑使用类似`--table=SCHEMAPAT.*--无依赖索引`若要仅选择索引,请考虑使用类似`--索引=SCHEMAPAT*`.

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

`-S*`图案`*`\
`--排除模式=*`图案`*`

排除模式中与指定值匹配的表和索引[*`图案`*](app-psql.html#APP-PSQL-PATTERNS)。可以多次指定此选项。

就像`--模式`,该模式可能是数据库限定的。

`-t*`图案`*`\
`--桌子=*`图案`*`

检查与指定值匹配的表[*`图案`*](app-psql.html#APP-PSQL-PATTERNS),除非另有规定。可以多次指定此选项。

这类似于`--关系`选项,但它仅适用于表,而不适用于索引。

`-T*`图案`*`\
`--排除表=*`图案`*`

排除与指定值匹配的表[*`图案`*](app-psql.html#APP-PSQL-PATTERNS)。可以多次指定此选项。

这类似于`--排除关系`选项,但它仅适用于表,而不适用于索引。

`--无依赖索引`

默认情况下,如果选中了一个表,则该表的任何btree索引也将被选中,即使它们不是由以下选项显式选择的:`--索引``--关系`。此选项将抑制该行为。

`--不依赖吐司`

默认情况下,如果选中了一个表,那么它的toast表(如果有)也将被选中,即使它没有被诸如`--桌子``--关系`。此选项将抑制该行为。

`--没有严格的名字`

默认情况下,如果参数`--数据库`, `--桌子`, `--索引``--关系`不匹配任何对象,这是一个致命错误。此选项将该错误降级为警告。

以下命令行选项控制表的检查:

`--排除吐司指针`

默认情况下,每当在表中遇到toast指针时,都会执行查找,以确保它引用toast表中明显有效的条目。这些检查可能非常慢,可以使用此选项跳过它们。

`--错误停止时`

在发现损坏的表的第一页上报告所有损坏后,停止处理该表关系并转到下一个表或索引。

请注意,索引检查总是在第一个损坏页面之后停止。此选项仅与表关系相关。

`--跳过=*`选项`*`

如果`全冻住了`如果给定,表损坏检查将跳过标记为“全部冻结”的所有表中的页面。

如果`都看得见`如果给定,表损坏检查将跳过标记为“全部可见”的所有表中的页面。

默认情况下,不会跳过任何页面。这可以指定为`没有一个`,但由于这是默认设置,因此无需提及。

`--启动块=*``*`

从指定的块号开始检查。如果正在检查的表关系的块数少于此数,则会发生错误。此选项不适用于索引,可能仅在检查单个表关系时有用。看见`--端块`进一步的警告。

`--端块=*``*`

在指定的块号处结束检查。如果正在检查的表关系的块数少于此数,则会发生错误。此选项不适用于索引,可能仅在检查单个表关系时有用。如果选中了常规表和toast表,则此选项将同时适用于这两个表,但在验证toast指针时,仍可以访问编号较高的toast块,除非使用`--排除吐司指针`.

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

`--希帕尔指数`

对于检查的每个索引,使用[安切克](amcheck.html)是的`希帕尔指数`选项

`--家长检查`

对于每个选中的btree索引,使用[安切克](amcheck.html)是的`bt_索引_父项_检查`函数,该函数在索引检查期间对父/子关系执行附加检查。

默认设置是使用amcheck`bt_索引_检查`函数,但请注意`--根下降`选项隐式选择`bt_索引_父项_检查`.

`--根下降`

对于选中的每个索引,通过使用从根页面对每个元组执行新的搜索,在叶级重新查找元组[安切克](amcheck.html)是的`根下降`选项

使用此选项也会隐式选择`--家长检查`选项

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

### 警告

`--家长检查`选项还是`--根下降`指定的选项需要相对强的关系级别锁。这些检查是唯一可以阻止并发数据修改的检查`插入`, `使现代化``删去`命令。

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

`-h*`主机名`*`\
`--主人=*`主机名`*`

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

`-p*`港口城市`*`\
`--港口=*`港口城市`*`

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

`-U`\
`--用户名=*`用户名`*`

要连接为的用户名。

`-w`\
`--没有密码`

永远不要发出密码提示。如果服务器需要密码身份验证,而密码无法通过其他方式使用,例如`.pgpass`文件,连接尝试将失败。在没有用户输入密码的批处理作业和脚本中,此选项非常有用。

`-W`\
`--密码`

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

这个选项从来都不是必需的,因为pg\_如果服务器要求密码验证,amcheck将自动提示输入密码。然而,pg_amcheck将浪费连接尝试,以发现服务器需要密码。在某些情况下,它值得输入`-W`以避免额外的连接尝试。

`--维护数据库=*`库名`*`

指定数据库或[连接字符串](libpq-connect.html#LIBPQ-CONNSTRING)用于发现要检查的数据库列表。如果两者都不是`--全部`也不使用任何包含数据库模式的选项,不需要这样的连接,该选项不起任何作用。否则,在连接到要检查的数据库时,也将使用此选项值中包含的除数据库名称以外的任何连接字符串参数。如果省略此选项,则默认为`博士后`或者,如果失败了,`模板1`.

还提供了其他选项:

`-e`\
`--回音`

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

`-j*`号码`*`\
`--工作=*`号码`*`

使用*`号码`*到服务器的并发连接,或每个要检查的对象一个,以较小者为准。

默认情况下,使用单个连接。

`-P`\
`--进展`

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

`-五`\
`--冗长的`

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

`-五`\
`--版本`

打印页面\_检查版本并退出。

`--安装丢失的`\
`--安装丢失的=*`模式`*`

安装检查数据库所需的任何缺失的扩展。如果尚未安装,每个扩展的对象将安装到给定的*`模式`*,或者如果未在架构中指定`pg_目录`.

目前,唯一需要的扩展是[安切克](amcheck.html).

`-?`\
`--救命`

显示关于pg的帮助\_amcheck命令行参数,然后退出。

## 笔记

pg_amcheck设计用于PostgreSQL 14.0及更高版本。

## 另见

[安切克](amcheck.html)