遇到一个很奇怪的问题。
因为有同事遇到过这个问题,然后我想测试一下把Linux服务器重启之后原来的PostgreSQL里面的库会不会出问题
重启前执行了sync同步了一下数据,然后用shutdown -r now命令把服务器给重启了
以下回答部分来自chatgpt,请参考:
根据您的描述,这种情况下数据库丢失和重新出现的问题可能与 PostgreSQL 的恢复机制相关。当数据库发生异常关闭(如服务器突然断电)时,PostgreSQL 会尝试自动执行崩溃恢复操作。
在一些情况下,PostgreSQL 可能会选择从保存点(Savepoint)开始恢复数据库,而不是从最新的事务日志位置恢复。这可能导致部分数据库更改(例如在突然关闭之前创建的数据库)不可见,直到恢复完成后。
下面是一些可能的原因:
PostgreSQL 内部保存点:在服务器重启后,PostgreSQL 可能会自动选择恢复到某个保存点,该保存点早于您创建的 test 数据库。这样,重启后会回滚到保存点之前的状态,而 test 数据库会被删除。
数据库恢复设置:您可能在 PostgreSQL 的配置文件中设置了特定的恢复选项。例如,如果 recovery_target
参数被配置为一个早于创建 test 数据库的时间点,那么在恢复过程中 test 数据库将被删除。
为了进一步理解和定位问题,您可以检查以下信息:
检查 PostgreSQL 的日志文件(通常位于 PostgreSQL 数据目录的 pg_log
子目录下),查看重启期间是否有任何异常或警告。
检查 PostgreSQL 的配置文件(postgresql.conf
)和恢复配置文件(recovery.conf
),了解是否设置了特定的恢复选项。
在 PostgreSQL 数据目录中,检查 pg_xlog
目录下的事务日志文件,了解在异常关闭后是否存在正确的持久化数据。
验证数据库的完整性,并确保所有表和数据都存在。您可以使用 PostgreSQL 提供的工具(如 pg_dump)备份和还原数据库,以验证数据的一致性。
请注意,如果您对 PostgreSQL 的配置和恢复流程不熟悉,最好咨询专业的 PostgreSQL 支持或论坛,以获取更详细的帮助和指导。他们可以更全面地检查您的配置和日志文件,以进一步帮助您定位和解决问题。
看似可见性问题。数据能不能看见,有两个因素,一是数据是否在库里;二是对当前事务是否可见;再次重启后,原来不可见的数据,可以看到了,而且使用正常。这就是可见性出了问题。
在系统关机后,数据库再次启动时,会执行恢复,可能这里有一些可见性数据恢复的有问题。psql -V 看下版本号,说不定在新版本已经被解决了。