内核之道 2022-09-15 14:44 采纳率: 100%
浏览 37
已结题

PostgreSQL报错apparent wraparound,有没有办法恢复数据?

问题遇到的现象和发生背景

使用的PostgreSQL版本是9.x系列,运行了若干年之后,出现了事务id环绕问题,详细报错信息:
ERROR: MultiXactId 1076887568 has not been created yet -- apparent wraparound

用代码块功能插入代码,请勿粘贴截图

根据PG的报错提示信息,其对应于multixact.c文件的代码,如下所示:

if (MultiXactIdPrecedes(multi, oldestMXact))
    {
        ereport(ERROR,
                (errcode(ERRCODE_INTERNAL_ERROR),
                 errmsg("MultiXactId %u does no longer exist -- apparent wraparound",
                        multi)));
        return -1;
    }

    if (!MultiXactIdPrecedes(multi, nextMXact))
        ereport(ERROR,
                (errcode(ERRCODE_INTERNAL_ERROR),
                 errmsg("MultiXactId %u has not been created yet -- apparent wraparound",
                        multi)));
. . . //省略
运行结果及报错内容

PG数据库服务报错提示:ERROR: MultiXactId 1076887568 has not been created yet -- apparent wraparound。
结果是PG无法无法启动。

我的解答思路和尝试过的方法

(1)尝试过通过单用户--single模式登录pg,然后执行vacuum,清除过期的死元组和冻结事务id,以达到释放xact ID的效果,结果无法实现。因为pg服务起不来,--single模式无法登录。
(2)尝试使用pg_dump等工具拷贝数据库文件,均以失败告终,因为pg_dump的前提是在pg服务正常运行的前提下。pg无法无法启动,这些方法都是行不通的。
(3)通过查阅资料,事务环绕问题确实是pg 9.x系列源码实现中的一个bug,分别在V9.4.9和V9.5.4版本中进行修复,但是在V10.6版本中仍然出现了该问题。

我想要达到的结果

即使PostgreSQL数据库出现apparent wraparound的报错,数据仍然能够读取,并恢复出来。

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 9月24日
      • 已采纳回答 9月16日
      • 创建了问题 9月15日

      悬赏问题

      • ¥15 编译报错,程序没有语法问题
      • ¥15 (微机原理)若用1K×8位的芯片,构成一个4KB的RAM,请用全译码的方式设计最大模式下的8086电路系统。
      • ¥15 这两个题二选一,用java,最好是elipse这个软件运行的
      • ¥20 Ubuntu20.10安装gcc报错
      • ¥15 bat获取文件夹下所有的csv文件名及文件的首行
      • ¥15 求教:text kit 如何根据textview的字体大小进行分页
      • ¥15 Hive on Spark配置问题
      • ¥15 BPNN回归问题预测混凝土强度,用dataset数据预处理,预测结果很差,望救助!
      • ¥15 求高通RIL与QMI相关的代码
      • ¥15 drools 规则引擎内存网络求解