postgresql - 索引的 Postgres pg_dump 缓存查找失败

标签 postgresql runtime-error

我正在尝试使用以下命令(省略详细信息)创建 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 数据吗?

最佳答案

系统索引可能已损坏。我会尝试以下操作:

  1. 停止数据库服务器
  2. 以单用户模式启动数据库,忽略系统和用户定义的索引:

    postgres --single -D /path/to/data --ignore_system_indexes=on --enable_indexscan=off --enable_bitmapscan=off <database>

  3. 重新索引整个数据库(包括目录):REINDEX DATABASE <database>;

  4. 重新启动数据库并再次尝试转储...

更多:ignore_system_indexes , REINDEX , enable_bitmapscan/enable_indexscan , single-user mode ;

关于postgresql - 索引的 Postgres pg_dump 缓存查找失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47704816/

相关文章:

sql - 同一列上两个值的百分比差异

php - 如何从 Request 生成 SQL?

python - 出现错误 "Maximum recursion depth exceeded while calling a Python object"

java - 托管小部件获取 java.lang.SecurityException : Permission Denial error

sql - Postgres 9.x - 有没有办法避免将数据库连接信息硬编码到 View 中?

sql - PostgreSQL 忽略窗口函数中的 NULLS

c - 使用 C 扩展在 Postgres DB 中存储带有时区的时间戳?

c - 测试 - 运行时错误 SIGSEGV

c++ - cin 导致运行时错误

ubuntu - 为什么当我想打开 minergate 控制台版本时却给我这个错误?