rog*_*ack 5

如果您指的是检测“无效”(创建不良)索引,显然 Postgres 在尝试创建索引时可能“失败”,然后查询规划器不会使用它们,尽管它们存在于您的系统中。此查询将检测“失败”的索引:

https://www.enterprisedb.com/blog/pgupgrade-bug-invalid-concurrently-created-indexes

SELECT n.nspname, c.relname
FROM   pg_catalog.pg_class c, pg_catalog.pg_namespace n,
       pg_catalog.pg_index i
WHERE  (i.indisvalid = false OR i.indisready = false) AND
       i.indexrelid = c.oid AND c.relnamespace = n.oid AND
       n.nspname != 'pg_catalog' AND
       n.nspname != 'information_schema' AND
       n.nspname != 'pg_toast'
Run Code Online (Sandbox Code Playgroud)

虽然我认为检测 TOAST 表索引不会有什么坏处,所以您可以删除查询的那部分 :)

相关,对我来说,有时只是在表上运行一个新的 ANALYZE 也会使索引突然开始在生产中使用(即,即使索引不是“无效”,它们也可能在 ANALYZE 运行之前未被使用)。奇怪的。


Den*_*rdy 1

您是否尝试过vacuum full pg_class以超级用户身份运行?

另外,自动真空吸尘器最终应该解决这个问题。您的对象似乎是临时表/索引,并且目录(通常)不像您的数据那样频繁更新。