错误:右同级的左链接不匹配:阻止 19 个指向 346956 的链接,而不是索引 "pg_depend_reference_index" 中的预期346955



我在Postgres中有一个数据库。DB很大,总尺寸超过4TB,超过500,000张桌子和许多索引。DB超过4岁。最近,PGSQL DB服务器没有启动,因此我进行了以下操作以重新开始:

/usr/pgsql-9.3/bin/pg_resetxlog -f  /var/lib/pgsql/9.3/data
/usr/pgsql-9.3/bin/pg_ctl -D /var/lib/pgsql/9.3/data stop
/usr/pgsql-9.3/bin/pg_ctl -D /var/lib/pgsql/9.3/data start
/usr/pgsql-9.3/bin/pg_ctl -D /var/lib/pgsql/9.3/data stop
systemctl restart postgresql-9.3

从那以后,每当我尝试在DB中创建一个新表时,我都会遇到以下错误:

mps_schools=> create table test_test(hello int);
ERROR:  right sibling's left-link doesn't match: block 19 links to 346956 instead of expected 346955 in index "pg_depend_reference_index"

我尝试重新索引DB,但它不起作用。我还能做什么?

pg_resetxlog破坏了您的数据库,这是很容易发生的事情,这就是为什么您不仅仅因为您没有启动数据库而不称呼它的原因。这是最后的沟渠努力,以使损坏的数据库升级。

你能做什么?

  1. 最佳解决方案:从pg_resetxlog

  2. 从备份中还原
  3. 执行数据库的离线备份。

    然后以单用户模式启动数据库:

    postgres --single -P -D /your/database/directory yourdbname
    

    然后尝试reidindex pg_depend

    REINDEX TABLE pg_catalog.pg_depend;
    

    退出单个用户会话,重新启动数据库,运行pg_dumpall以倾倒数据库(并希望它有效(,使用initdb创建一个新的数据库群集并导入转储。

    不要继续使用 pg_resetxlog的群集。

相关内容

  • 没有找到相关文章

最新更新