首页 > 解决方案 > PostgreSQL 说:MultiXactId 1085002 尚未创建——明显的环绕

问题描述

我在 AWS 上通过 Aurora PostgreSQL 写入我的 Postgres 数据库时遇到了一个奇怪的错误

PostgreSQL 版本 9.6.11

我尝试在表 admin_user 上解决该问题

 Vacuum admin_user 
 Vacuum Freeze admin_user

我无法重新创建该表,因为它已连接到所有其他表并且会造成大混乱

更新问题

我无法访问该表

在此处输入图像描述

标签: postgresqlamazon-aurora

解决方案


由于我们在这里可能无法理解的原因(可能是 9.6.19 可能已修复的 PostgreSQL 软件错误,也可能是硬件问题),您遭受了数据损坏。

由于您使用的是托管数据库,并且只能通过 SQL 访问数据库,因此您的选择是有限的。

最好的方法可能是使用子事务从表中提取尽可能多的数据(test在此示例中调用):

/* will receive salvaged rows */
CREATE TABLE test_copy (LIKE test);

您可以运行以下代码:

DO
$$DECLARE
   c CURSOR FOR SELECT * FROM test;
   r test;
   cnt bigint := 0;
BEGIN
   OPEN c;

   LOOP
      cnt := cnt + 1;

      /* block to start a subtransaction for each row */
      BEGIN
         FETCH c INTO r;

         EXIT WHEN NOT FOUND;
      EXCEPTION
         WHEN OTHERS THEN
            /* there was data corruption fetching the row */
            RAISE WARNING 'skipped corrupt data at row number %', cnt;

            NOVE c;

            CONTINUE;
      END;

      /* row is good, salvage it */
      INSERT INTO test_copy VALUES (r.*);
   END LOOP;
END;$$;

祝你好运。


推荐阅读