pg_control

包含服务器内部状态信息的文件的

pg_control 是一个8KB的二进制文件,它存储了关于PostgreSQL服务器内部状态的各种信息,例如最近的检查点,以及由initdb设置的基本参数。它位于集群的global/目录中。

pg_control是在PostgreSQL 7.1中添加的(提交4d14fe00)。

客户端工具pg_controldata(以及带有-n/--dry-run选项的pg_resetwal)可以显示pg_control文件的内容。从PostgreSQL 9.6开始,以下SQL函数也可以用于从文件中提取信息

源代码

pg_control文件的名称由src/include/access/xlog_internal.h中的XLOG_CONTROL_FILE定义。

pg_control文件的结构由ControlFileData结构定义,该结构包含在头文件src/include/catalog/pg_control.h中,尽管它不是一个系统目录关系。

pg_control文件的大小由PG_CONTROL_FILE_SIZE(也在src/include/catalog/pg_control.h中;PostgreSQL 9.6及更早版本:PG_CONTROL_SIZE)定义,当前为8192字节。然而,实际内容(由ControlFileData结构定义)旨在不超过512字节,以适应典型的磁盘驱动器扇区;请参阅src/include/catalog/pg_control.h中的注释。该文件用零填充以降低过早到达文件末尾错误的发生概率(请参阅src/backend/access/transam/xlog.c中函数WriteControlFile()的注释)。

格式变更

从一个版本到下一个版本,pg_control文件的格式可能会发生变化。这是自PostgreSQL 9.4以来ControlFileDataCheckPoint结构的变化列表。

PostgreSQL 18

添加了以下字段

  • bool default_char_signedness; (提交44fe30fd

PostgreSQL 12

添加了以下字段

  • int max_wal_senders; (提交ea92368c

删除了以下字段

  • uint32 nextXidEpoch; /* nextXid 的高位字节 */
  • TransactionId nextXid; /* 下一个空闲 XID */

并替换为

  • FullTransactionId nextFullXid; /* 下一个空闲完整事务 ID */

(提交2fc7af5e

PostgreSQL 11

删除了以下字段

  • XLogRecPtr prevCheckPoint; (提交4b0d28de

PostgreSQL 10

添加了以下字段

  • char mock_authentication_nonce[MOCK_AUTH_NONCE_LEN]; (提交818fd4a6

PostgreSQL 9.5

添加了以下字段

  • bool track_commit_timestamp;

此外,CheckPoint结构添加了以下字段

  • TransactionId oldestCommitTsXid; /* 具有有效提交时间戳的最旧 Xid */
  • TransactionId newestCommitTsXid; /* 具有有效提交时间戳的最新 Xid */

(所有更改均在提交73c986ad中;请注意,直到提交99dd8b05才增加了PG_CONTROL_VERSION

PostgreSQL 9.4

添加了以下字段

  • int max_worker_processes; (提交6bc8ef0b

恢复pg_control

pg_control可能损坏的极少数情况下,可能可以使用pg_resetwal(PostgreSQL 9.6及更早版本:pg_resetxlog)来恢复它。

分类

PostgreSQL内部

另请参阅

pg_controldata

反馈

提交关于“pg_control”的任何评论、建议或更正请在此处 提交