ERROR: right sibling's left-link doesn't match: block 19 links to 346956 instead of expected 346955 in index "pg_depend_reference_index"
ERROR: right sibling's left-link doesn't match: block 19 links to 346956 instead of expected 346955 in index "pg_depend_reference_index"
我在 postgres 中有一个数据库。数据库很大,总大小超过 4TB,超过 500,000 tables 和许多索引。 DB 已超过 4 岁。
最近,Pgsql 数据库服务器没有启动,所以我做了以下事情让它重新启动:
/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
从那时起,每当我尝试在数据库中创建新的 table 时,我都会收到以下错误:
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"
我试过重新索引数据库,但没有用。我还能做什么?
pg_resetxlog
破坏了你的数据库,这是很容易发生的事情,这就是为什么你不调用它只是因为你没有启动数据库。恢复损坏的数据库是最后的努力。
你能做什么?
最佳解决方案:从 运行 pg_resetxlog
.
之前的备份恢复
执行数据库的脱机备份。
然后以单用户模式启动数据库:
postgres --single -P -D /your/database/directory yourdbname
然后尝试重建索引 pg_depend
:
REINDEX TABLE pg_catalog.pg_depend;
退出单用户会话,重新启动数据库,运行 pg_dumpall
转储数据库(并希望它能工作),使用 initdb
创建一个新的数据库集群并导入垃圾场。
不要继续使用您 运行 pg_resetxlog
.
所在的集群
我在 postgres 中有一个数据库。数据库很大,总大小超过 4TB,超过 500,000 tables 和许多索引。 DB 已超过 4 岁。 最近,Pgsql 数据库服务器没有启动,所以我做了以下事情让它重新启动:
/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
从那时起,每当我尝试在数据库中创建新的 table 时,我都会收到以下错误:
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"
我试过重新索引数据库,但没有用。我还能做什么?
pg_resetxlog
破坏了你的数据库,这是很容易发生的事情,这就是为什么你不调用它只是因为你没有启动数据库。恢复损坏的数据库是最后的努力。
你能做什么?
最佳解决方案:从 运行
pg_resetxlog
. 之前的备份恢复
执行数据库的脱机备份。
然后以单用户模式启动数据库:
postgres --single -P -D /your/database/directory yourdbname
然后尝试重建索引
pg_depend
:REINDEX TABLE pg_catalog.pg_depend;
退出单用户会话,重新启动数据库,运行
pg_dumpall
转储数据库(并希望它能工作),使用initdb
创建一个新的数据库集群并导入垃圾场。不要继续使用您 运行
pg_resetxlog
. 所在的集群