2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

19.14. 错误处理 #

exit_on_error (boolean) #

如果为 on,任何错误都将终止当前会话。默认情况下,此设置为 off,因此只有 FATAL 错误才会终止会话。

restart_after_crash (boolean) #

当设置为 on(这是默认值)时,PostgreSQL 将在后端崩溃后自动重新初始化。通常,将此值保留为 on 是最大化数据库可用性的最佳方法。但是,在某些情况下,例如当 PostgreSQL 由集群软件调用时,禁用重启可能很有用,这样集群软件就可以获得控制权并执行其认为适当的任何操作。

此参数只能在 postgresql.conf 文件或服务器命令行中设置。

data_sync_retry (boolean) #

当设置为 off(这是默认值)时,如果无法将修改后的数据文件刷新到文件系统,PostgreSQL 将引发 PANIC 级别的错误。这会导致数据库服务器崩溃。此参数只能在服务器启动时设置。

在某些操作系统上,在写回失败后,内核页面缓存中的数据状态是未知的。在某些情况下,它可能已被完全遗忘,因此重试是不安全的;第二次尝试可能报告成功,但实际上数据已丢失。在这些情况下,避免数据丢失的唯一方法是在报告任何失败后从 WAL 进行恢复,最好是在调查失败的根本原因并更换任何有故障的硬件之后。

如果设置为 on,PostgreSQL 将改为报告错误但继续运行,以便可以在后续的检查点中重试数据刷新操作。仅在调查操作系统在写回失败时对缓冲数据的处理方式之后才将其设置为 on。

recovery_init_sync_method (enum) #

当设置为 fsync(这是默认值)时,PostgreSQL 将在崩溃恢复开始之前递归地打开和同步数据目录中的所有文件。文件搜索将遵循 WAL 目录和每个配置的表空间的符号链接(但不包括任何其他符号链接)。这是为了确保所有 WAL 和数据文件都已持久存储在磁盘上,然后再重放更改。这适用于每次启动未干净关闭的数据库集群时,包括使用 pg_basebackup 创建的副本。

在 Linux 上,也可以使用 syncfs,要求操作系统同步包含数据目录、WAL 文件和每个表空间的(但不包括通过符号链接可达的任何其他文件系统)文件系统。这可能比 fsync 设置快得多,因为它不需要逐个打开文件。另一方面,如果一个文件系统被其他修改了大量文件的应用程序共享,它可能会变慢,因为这些文件也会被写入磁盘。此外,在 5.8 之前的 Linux 版本中,写入数据到磁盘时遇到的 I/O 错误可能不会报告给 PostgreSQL,相关的错误消息可能仅出现在内核日志中。

此参数只能在 postgresql.conf 文件或服务器命令行中设置。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。