sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilka är de tillgängliga alternativen för att identifiera och ta bort ogiltiga objekt i Postgres (ex:korrupta index)

Om du syftar på att upptäcka "ogiltiga" (dåligt skapade) index kan uppenbarligen Postgres "misslyckas" i ett försök att skapa ett index, och då kommer frågeplaneraren inte att använda dem, även om de finns i ditt system. Den här frågan kommer att upptäcka "misslyckade" index:

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'

även om jag antar att det inte skulle skada att upptäcka TOAST-tabellindex, så du kan ta bort den delen av frågan :)

Relaterat, för mig gör ibland bara att köra en ny ANALYS på ett bord att index plötsligt börjar användas i produktionen (dvs även om index inte är "ogiltiga" kan de vara oanvända tills en ANALYSE-körning). Konstigt.



  1. JPA @NamedQuery med bitvis AND (&) som kriterier

  2. Hur kan jag migrera versioner från bugzilla till ett nytt anpassat "källversionsfält" i redmine (vilken SQL-syntax behöver jag)?

  3. SQL - säker nedkastning av BIGINT till INT

  4. Exportera mysql-tabell till SQL-format?