PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quelles sont les options disponibles pour identifier et supprimer les objets invalides dans Postgres (ex :index corrompus)

Si vous faites référence à la détection d'index "invalides" (mal créés), apparemment Postgres peut "échouer" dans une tentative de création d'un index, puis le planificateur de requêtes ne les utilisera pas, bien qu'ils existent dans votre système. Cette requête détectera les index "en échec" :

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'

bien que je suppose que la détection des index de table TOAST ne ferait pas de mal, vous pouvez donc supprimer cette partie de la requête :)

En relation, pour moi, parfois, le simple fait d'exécuter une nouvelle ANALYZE sur une table fait également que les index commencent soudainement à être utilisés en production (c'est-à-dire que même si les index ne sont pas "invalides", ils peuvent être inutilisés jusqu'à une exécution ANALYZE). Bizarre.