20.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文件中或者服务器命令行中设置。