Jeśli masz na myśli wykrywanie „nieprawidłowych” (źle utworzonych) indeksów, najwyraźniej Postgres może „nie powieść się” przy próbie utworzenia indeksu, a wtedy planer zapytań nie będzie ich używał, chociaż istnieją w twoim systemie. To zapytanie wykryje „nieudane” indeksy:
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'
chociaż przypuszczam, że wykrycie indeksów tabeli TOAST nie zaszkodzi, więc możesz usunąć tę część zapytania :)
Pokrewne, dla mnie czasami samo uruchomienie nowej ANALIZY na tabeli powoduje również, że indeksy nagle zaczynają być używane w produkcji (tj. nawet jeśli indeksy nie są „nieprawidłowe”, mogą być nieużywane do czasu uruchomienia ANALIZY). Dziwne.