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