Postgresql 9.2.1 在独立后端模式下完全真空后无法初始化

Posted

技术标签:

【中文标题】Postgresql 9.2.1 在独立后端模式下完全真空后无法初始化【英文标题】:Postgresql 9.2.1 failed to initialize after full vacuum in standalone backend mode 【发布时间】:2017-10-23 16:07:01 【问题描述】:

在postgresql 9.2.1版本中,数据库不接受任何命令以避免wraparoound dataloss。pg_log出现以下错误,

错误:数据库不接受命令以避免数据库“XXX”中的环绕数据丢失 提示:停止 postmaster 并使用独立的后端清理该数据库。 您可能还需要提交或回滚旧的准备好的事务。

我在独立后端模式下为数据库 XXX 执行了完全真空。之后我尝试重新启动 pgsql,现在 pgsql 服务器拒绝连接。在执行 pg_isready 命令时,主机拒绝连接。

在完成真空过程后我有什么需要做的吗? postgres 服务器启动失败的可能原因是什么?提前致谢。

【问题讨论】:

您是否对每个数据库都进行了真空吸尘?您可能必须执行 template0 和 1 dbs 以及其他所有操作。 另外你真的应该升级到最新的 9.2。您错过了多年的错误修复,更不用说不再支持 9.2。 为什么我必须清理每个数据库?错误本身提到了发生环绕问题的特定数据库@ScottMarlowe。 感谢您的升级建议。我会把它作为我的最后一张卡片。 @ScottMarlowe 一旦您解决了环绕问题,您应该至少升级到最新的 9.2 版本,即 9.2.23 【参考方案1】:

在单用户模式下,运行

SELECT datname, datfrozenxid FROM pg_database;

查看需要清理哪些数据库(具有最小值的数据库)。

在这些数据库中运行VACUUM (FREEZE)不是VACUUM (FULL)

【讨论】:

9.2.1 版本的 pg_database 中没有 datminmxid 属性。而且我必须抽真空(冻结)具有最小 datfrozenxid 的那个,对吧? 对。升级到更高版本的 PostgreSQL 也无济于事。您必须现在完成VACUUM (FREEZE);稍后升级。 谢谢。真空冻结或完全对数据库中的数据造成任何问题吗?数据保持不变,对吧? VACUUM 不会破坏数据。您需要 VACUUM (FREEZE) 反对交易 ID 环绕; VACUUM (FULL) 无济于事。只有当您运行VACUUM (FREEZE)时,您的数据才会被销毁。 如果真空冷冻过程也失败了。除了升级postgresql版本还有什么办法吗?

以上是关于Postgresql 9.2.1 在独立后端模式下完全真空后无法初始化的主要内容,如果未能解决你的问题,请参考以下文章

将 PostgreSQL 9.2.1 与 Hibernate 连接起来

PostgreSQL模式下的h2数据库不接受PostgreSQL SQL语法

linux 怎么安装postgresql-9.2.1-1-linux

jOOQ 无法在 PostgreSQL 模式下为 H2 数据库正确翻译 SQL

为啥 PostgreSQL 9.2.1 可以存储大于 2GB 的大对象?

MongooseIM 可以在 PostgreSQL 后端处理多少用户?