20.14. 错误处理#
exit_on_error
(布尔值
) #如果打开,任何错误都将终止当前会话。默认情况下,此选项设置为关闭,因此只有致命错误才会终止会话。
restart_after_crash
(布尔值
) #当设置为打开(这是默认设置)时,PostgreSQL 会在后端崩溃后自动重新初始化。将此值保留为打开通常是最大程度提高数据库可用性的最佳方式。但是,在某些情况下(例如,当 PostgreSQL 被群集软件调用时),禁用重新启动可能很有用,以便群集软件可以获得控制并采取其认为适当的任何操作。
此参数只能在
postgresql.conf
文件或服务器命令行中设置。data_sync_retry
(boolean
) #如果设置为关闭(默认设置),PostgreSQL 将在无法将已修改的数据文件刷新到文件系统时引发 PANIC 级错误。这会导致数据库服务器崩溃。此参数只能在服务器启动时设置。
在某些操作系统上,回写失败后内核页面高速缓存中的数据状态未知。在某些情况下,它可能已被完全遗忘,从而不适合重试;第二次尝试可能会报告为成功,但实际上数据已丢失。在这种情况下,避免数据丢失的唯一方法是在报告任何故障后从 WAL 中恢复,最好在调查故障的根本原因并更换任何有故障的硬件后。
如果设置为开启,PostgreSQL 将改为报告错误,但继续运行,以便可以在以后的检查点中重试数据刷新操作。仅在调查操作系统在回写失败时对缓冲数据的处理方式后才将其设置为开启。
recovery_init_sync_method
(enum
) #如果设置为
fsync
(默认设置),PostgreSQL 将在崩溃恢复开始前递归打开并同步数据目录中的所有文件。文件搜索将遵循 WAL 目录和每个已配置表空间(但不是任何其他符号链接)的符号链接。这样做的目的是确保在重放更改之前,所有 WAL 和数据文件都持久存储在磁盘上。这适用于启动未正常关闭的数据库集群,包括使用 pg_basebackup 创建的副本。在 Linux 上,可以使用
syncfs
,要求操作系统同步包含数据目录、WAL 文件和每个表空间(但不是可以通过符号链接访问的任何其他文件系统)的整个文件系统。这可能比fsync
设置快得多,因为它不需要逐个打开每个文件。另一方面,如果文件系统由修改大量文件的其他应用程序共享,则它可能会更慢,因为这些文件也将被写入磁盘。此外,在 5.8 之前的 Linux 版本上,在将数据写入磁盘时遇到的 I/O 错误可能不会报告给 PostgreSQL,并且相关错误消息可能只出现在内核日志中。此参数只能在
postgresql.conf
文件或服务器命令行中设置。