有哪些可用选项可以识别和删除 Postgres 中的无效对象
如果您指的是检测“无效”(创建不良)索引,显然 Postgres 在尝试创建索引时可能会“失败”,然后查询规划器将不会使用它们,尽管它们存在于您的系统中。此查询将检测“失败”索引:
https://www.enterprisedb.com/blog/pgupgrade-bug-invalid-concurrently-created-indexes 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'
虽然我认为检测 TOAST 表索引不会有什么坏处,所以您可以删除查询的该部分:)
相关的是,对我来说,有时只是在表上运行新的 ANALYZE 也会使索引突然开始在生产中使用(即,即使索引不是“无效”,它们也可能在 ANALYZE 运行之前不被使用)。诡异的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)