Als u verwijst naar het detecteren van "ongeldige" (slecht gemaakte) indexen, kan Postgres blijkbaar "mislukken" in een poging om een index te maken, en dan zal de queryplanner ze niet gebruiken, hoewel ze in uw systeem bestaan. Deze zoekopdracht detecteert "mislukte" indexen:
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'
hoewel ik veronderstel dat het detecteren van TOAST-tabelindexen geen kwaad zou doen, dus je kunt dat deel van de zoekopdracht verwijderen :)
Gerelateerd, soms zorgt het uitvoeren van een nieuwe ANALYZE op een tafel er ook voor dat indexen plotseling in productie worden gebruikt (d.w.z. zelfs als indexen niet "ongeldig" zijn, kunnen ze ongebruikt zijn tot een ANALYSE-run). Raar.