PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Quali sono le opzioni disponibili per identificare e rimuovere gli oggetti non validi in Postgres (es:indici danneggiati)

Se ti riferisci al rilevamento di indici "non validi" (creati male), apparentemente Postgres può "fallire" nel tentativo di creare un indice e quindi il pianificatore di query non li utilizzerà, sebbene esistano nel tuo sistema. Questa query rileverà gli indici "non riusciti":

https://www.enterprisedb.com/blog/pgupgrade -bug-non-validi-indici-creati-contemporaneamente

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'

anche se suppongo che rilevare gli indici delle tabelle TOAST non danneggerebbe, quindi puoi rimuovere quella parte della query :)

Correlati, per me a volte solo l'esecuzione di una nuova ANALISI su una tabella fa sì che gli indici inizino improvvisamente a essere utilizzati in produzione (ad esempio, anche se gli indici non sono "non validi", potrebbero non essere utilizzati fino all'esecuzione di ANALISI). Strano.