↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 命令行工具 / 服务端程序

pg_resetwal

pg_resetwal — 重置 PostgreSQL 数据库集簇的预写式日志及其他控制信息

当前查看 PostgreSQL 18.6。

说明

pg_resetwal — 重置 PostgreSQL 数据库集簇的预写式日志及其他控制信息

手册中的可执行程序
pg_resetwal
程序版本
18.6
参考清单
服务端程序
选项定义组
15

用法

pg_resetwal [ -f | --force ] [ -n | --dry-run ] [ option ...] [ -D | --pgdata ] datadir

手册中的选项

选项与参数说明
datadir -D datadir --pgdata= datadir指定数据库目录的位置。出于安全原因,必须在命令行上指定数据目录。 pg_resetwal 不使用环境变量 PGDATA 。
-f --force即使在可能有危险的情况下,也强制 pg_resetwal 继续执行,如上文所述。具体来说,如果服务器未被干净关闭,或者 pg_resetwal 无法为 pg_control 确定有效数据,则必须指定该选项。
-n --dry-run-n / --dry-run 选项会让 pg_resetwal 打印从 pg_control 重建出的值以及即将更改的值,然后在不做任何修改的情况下退出。这主要是调试工具,但在真正允许 pg_resetwal 执行之前,也可用作合理性检查。
-V --version显示版本信息,然后退出。
-? --help显示帮助,然后退出。
-c xid , xid --commit-timestamp-ids= xid , xid手工设置可检索提交时间的最旧和最新事务 ID。
-e xid_epoch --epoch= xid_epoch手工设置下一个事务 ID 的纪元。
-l walfile --next-wal-file= walfile通过指定下一个 WAL 段文件的名称,手工设置 WAL 起始位置。
-m mxid , mxid --multixact-ids= mxid , mxid手工设置下一个和最旧的多事务 ID。
-o oid --next-oid= oid手工设置下一个 OID。
-O mxoff --multixact-offset= mxoff手工设置下一个多事务偏移量。
-u xid --oldest-transaction-id= xid手工设置最旧的未冻结事务 ID。
-x xid --next-transaction-id= xid手工设置下一个事务 ID。
--char-signedness= option手工设置默认的 char 有符号性。可选值为 signed 和 unsigned 。
--wal-segsize= wal_segment_size设置新的 WAL 段大小,单位为兆字节。取值必须是 1 到 1024(兆字节)之间的 2 的幂。更多信息参见 initdb 的同名选项。

环境变量

变量含义
PG_COLOR指定诊断消息是否使用颜色。可选值为 always 、 auto 和 never 。

手册定义

pg_resetwal

pg_resetwal — 重置 PostgreSQL 数据库集簇的预写式日志及其他控制信息

大纲

pg_resetwal [ -f | --force ] [ -n | --dry-run ] [option...] [ -D | --pgdata ]datadir

说明

pg_resetwal 会清除预写式日志(WAL),并可选择性地重置存储在 pg_control 文件中的某些其他控制信息。如果这些文件已经损坏,有时就需要使用此功能。只有当服务器因这类损坏而无法启动时,才应将其作为最后手段使用。

某些选项,如 --wal-segsize(见下文),也可用于在不重新运行 initdb 的情况下修改数据库集簇的某些全局设置。若不使用下文提到的危险模式,则可在其他方面完好的数据库集簇上安全执行此操作。

如果在某个数据目录上使用 pg_resetwal 时,服务器已经被干净关闭且控制文件完好,那么除了会清除不再使用的 WAL 文件外,它不会对数据库系统的内容产生任何影响。其他任何用法都可能有危险,必须极其谨慎。若要在服务器未干净关闭或控制文件已损坏的数据目录上执行操作,pg_resetwal 要求必须指定 -f(强制)选项。

在带有损坏 WAL 或损坏控制文件的数据目录上运行此命令后,服务器应该可以启动;但请记住,由于仅部分提交的事务,数据库中可能含有不一致的数据。应立即转储数据,运行 initdb,然后恢复。恢复后,请检查是否存在不一致并按需修复。

如果 pg_resetwal 报告无法确定 pg_control 的有效数据,则可以通过指定 -f(强制)选项强行继续。在这种情况下,缺失的数据将以看似合理的值代替。大多数字段预计都能匹配,但对于下一个 OID、下一个事务 ID 及其纪元、下一个多事务 ID 及其偏移量,以及 WAL 起始位置字段,可能仍需要人工协助。这些字段可通过下文讨论的选项来设置。如果无法为所有这些字段确定正确值,仍然可以使用 -f,但恢复得到的数据库必须比平时更受怀疑:立即转储并恢复势在必行。切勿在完成转储之前对数据库执行任何修改数据的操作,因为任何此类操作都很可能使损坏进一步恶化。

该工具只能由安装该服务器的用户运行,因为它需要对数据目录具有读写访问权限。

选项

datadir
-D datadir
--pgdata=datadir

指定数据库目录的位置。出于安全原因,必须在命令行上指定数据目录。pg_resetwal 不使用环境变量 PGDATA。

-f
--force

即使在可能有危险的情况下,也强制 pg_resetwal 继续执行,如上文所述。具体来说,如果服务器未被干净关闭,或者 pg_resetwal 无法为 pg_control 确定有效数据,则必须指定该选项。

-n
--dry-run

-n/--dry-run 选项会让 pg_resetwal 打印从 pg_control 重建出的值以及即将更改的值,然后在不做任何修改的情况下退出。这主要是调试工具,但在真正允许 pg_resetwal 执行之前,也可用作合理性检查。

-V
--version

显示版本信息,然后退出。

-?
--help

显示帮助,然后退出。

以下选项仅在 pg_resetwal 无法通过读取 pg_control 确定适当值时才需要使用。安全值可按下述方法确定。对于接受数字参数的选项,可使用前缀 0x 指定十六进制值。请注意,这些说明仅适用于标准块大小为 8 kB 的情况。

-c xid,xid
--commit-timestamp-ids=xid,xid

手工设置可检索提交时间的最旧和最新事务 ID。

可检索提交时间的最旧事务 ID 的安全值(第一部分),可以通过查看数据目录下 pg_commit_ts 目录中数值最小的文件名来确定。相反,可检索提交时间的最新事务 ID 的安全值(第二部分),可以通过查看同一目录中数值最大的文件名来确定。文件名均为十六进制。

-e xid_epoch
--epoch=xid_epoch

手工设置下一个事务 ID 的纪元。

事务 ID 纪元实际上并未存储在数据库中的任何地方,除了由 pg_resetwal 设置的这个字段,因此就数据库本身而言,任何值都可用。可能需要调整该值,以确保 Slony-I 和 Skytools 等复制系统正常工作 — 如果确有需要,应该可以从下游复制数据库的状态中获得合适的值。

-l walfile
--next-wal-file=walfile

通过指定下一个 WAL 段文件的名称,手工设置 WAL 起始位置。

下一个 WAL 段文件的名称应大于当前数据目录下 pg_wal 目录中现存的任意 WAL 段文件名。这些名称同样采用十六进制,并由三个部分组成。第一部分是“时间线 ID”,通常应保持不变。例如,如果 00000001000000320000004A 是 pg_wal 中最大的条目,则应使用 -l 00000001000000320000004B 或更大的值。

请注意,在使用非默认 WAL 段大小时,WAL 文件名中的数字与系统函数和系统视图报告的 LSN 不同。该选项接受的是 WAL 文件名,而不是 LSN。

注意

pg_resetwal 自身会检查 pg_wal 中的文件,并为 -l 选择一个超过现有最后一个文件名的默认值。因此,只有在确定存在当前不在 pg_wal 中的 WAL 段文件(例如离线归档中的文件),或 pg_wal 的内容完全丢失时,才应该需要手动调整 -l。

-m mxid,mxid
--multixact-ids=mxid,mxid

手工设置下一个和最旧的多事务 ID。

要确定下一个多事务 ID(第一部分)的安全值,可以在数据目录下的 pg_multixact/offsets 目录中找到数值最大的文件名,将其加一,再乘以 65536(0x10000)。相应地,要确定最旧多事务 ID(-m 的第二部分)的安全值,可以找到同一目录中数值最小的文件名,再乘以 65536。文件名使用十六进制,因此最简单的做法是以十六进制指定选项值,并在末尾添加四个零。

-o oid
--next-oid=oid

手工设置下一个 OID。

并没有同样简单的方法来确定一个超出数据库中最大 OID 的下一个 OID,不过幸运的是,下一个 OID 的设置是否精确并不关键。

-O mxoff
--multixact-offset=mxoff

手工设置下一个多事务偏移量。

安全值可以通过查看数据目录下 pg_multixact/members 目录中数值最大的文件名,先加一,再乘以 52352 (0xCC80) 来确定。文件名是十六进制。这里没有像其他选项那样通过追加零即可得到结果的简单方法。

-u xid
--oldest-transaction-id=xid

手工设置最旧的未冻结事务 ID。

安全值可以通过查看数据目录下 pg_xact 目录中数值最小的文件名,再乘以 1048576 (0x100000) 来确定。请注意,文件名是十六进制。通常,选项值也用十六进制指定最为简单。例如,如果 0007 是 pg_xact 中最小的条目,那么 -u 0x700000 就可以使用(五个尾随零提供了正确的乘数)。

-x xid
--next-transaction-id=xid

手工设置下一个事务 ID。

安全值可以通过查看数据目录下 pg_xact 目录中数值最大的文件名,先加一,再乘以 1048576 (0x100000) 来确定。请注意,文件名是十六进制。通常,选项值也用十六进制指定最为简单。例如,如果 0011 是 pg_xact 中最大的条目,那么 -x 0x1200000 就可以使用(五个尾随零提供了正确的乘数)。

--char-signedness=option

手工设置默认的 char 有符号性。可选值为 signed 和 unsigned。

对于由 pg_upgrade 从 18 之前的 PostgreSQL 版本升级而来的数据库集簇,安全值应为升级前运行该集簇的平台上默认的 char 有符号性。对于所有其他集簇,signed 就是安全值。不过,该选项专供 pg_upgrade 使用,通常不应手工使用。

--wal-segsize=wal_segment_size

设置新的 WAL 段大小,单位为兆字节。取值必须是 1 到 1024(兆字节)之间的 2 的幂。更多信息参见 initdb 的同名选项。

该选项也可用于更改现有数据库集簇的 WAL 段大小,从而避免重新执行 initdb。

注意

虽然 pg_resetwal 会把 WAL 起始位置设置到超出现有最新 WAL 段文件的位置,但某些段大小变更可能导致旧 WAL 文件名被重新使用。如果 WAL 文件名重叠会给归档策略带来问题,建议将 -l 与此选项配合使用,手工设置 WAL 起始位置。

环境

PG_COLOR

指定诊断消息是否使用颜色。可选值为 always、auto和 never。

注解

服务器运行期间不得使用此命令。如果在数据目录中发现服务器锁文件,pg_resetwal 将拒绝启动。如果服务器曾崩溃,可能遗留锁文件;在这种情况下,可以删除该锁文件以允许 pg_resetwal 运行。但在这样做之前,务必再三确认没有任何服务器进程仍在运行。

pg_resetwal 仅适用于相同主版本的服务器。

文档与源码

来源构建
版本
18.6
构建
https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
来源指纹
ee8d1a3612338fd9adf250730cb640fcc5233b5491337cc00a316a44e3a0b9f8

版本比较

PostgreSQL 11 → 12: 属性变化。

以下差异保留原始字段名与英文源描述。

--- PostgreSQL 11
+++ PostgreSQL 12
@@ -1,5 +1,10 @@
 {
-  "environment": [],
+  "environment": [
+    {
+      "description": "Specifies whether to use color in diagnostic messages. Possible values are always , auto and never .",
+      "name": "PG_COLOR"
+    }
+  ],
   "options": [
     {
       "description": "Force pg_resetwal to proceed even if it cannot determine valid data for pg_control , as explained above.",

比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。

相关条目

导出 JSON · 返回命令行工具 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。