Если вы имеете в виду обнаружение «недействительных» (плохо созданных) индексов, очевидно, что 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'
хотя я предполагаю, что обнаружение индексов таблицы TOAST не повредит, поэтому вы можете удалить эту часть запроса:)
В связи с этим, для меня иногда просто запуск свежего ANALYZE для таблицы также приводит к тому, что индексы внезапно начинают использоваться в производственной среде (т. Е. Даже если индексы не являются «недействительными», они могут не использоваться до запуска ANALYZE). Weird.