我正在尝试使用以下命令(省略详细信息)创建 postgres 数据库的备份:
$ pg_dump -h $host -p 5432 -U $user $db > db.sql
一段时间后,我得到一个错误(格式化)
pg_dump: [archiver (db)] query failed: ERROR: cache lookup failed for index 1184605879
pg_dump: [archiver (db)] query was:
SELECT t.tableoid,
t.oid,
t.relname AS indexname,
pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef,
t.relnatts AS indnkeys,
i.indkey,
i.indisclustered,
false AS indisreplident,
t.relpages,
c.contype,
c.conname,
c.condeferrable,
c.condeferred,
c.tableoid AS contableoid,
c.oid AS conoid,
pg_catalog.pg_get_constraintdef(c.oid, false) AS condef,
(SELECT spcname FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace,
t.reloptions AS indreloptions
FROM pg_catalog.pg_index i
JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid)
LEFT JOIN pg_catalog.pg_constraint c ON (i.indrelid = c.conrelid AND i.indexrelid = c.conindid AND c.contype IN ('p','u','x'))
WHERE i.indrelid = '1184605870'::pg_catalog.oid AND i.indisvalid AND i.indisready
ORDER BY indexname
然后我验证了 pg_index
中的索引 ID 不存在。有什么方法可以解决这个问题,或者有什么方法可以忽略此错误并继续以便我可以继续导出非 pg_catalog
数据吗?
最佳答案
系统索引可能已损坏。我会尝试以下操作:
- 停止数据库服务器
以单用户模式启动数据库,忽略系统和用户定义的索引:
postgres --single -D /path/to/data --ignore_system_indexes=on --enable_indexscan=off --enable_bitmapscan=off <database>
重新索引整个数据库(包括目录):
REINDEX DATABASE <database>;
- 重新启动数据库并再次尝试转储...
更多:ignore_system_indexes , REINDEX , enable_bitmapscan/enable_indexscan , single-user mode ;
关于postgresql - 索引的 Postgres pg_dump 缓存查找失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47704816/