sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuáles son las opciones disponibles para identificar y eliminar los objetos no válidos en Postgres (por ejemplo, índices corruptos)?

Si se refiere a la detección de índices "no válidos" (mal creados), aparentemente Postgres puede "fallar" en un intento de crear un índice, y luego el planificador de consultas no los usará, aunque existen en su sistema. Esta consulta detectará índices "fallidos":

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'

aunque supongo que detectar los índices de la tabla TOAST no estaría de más, por lo que puede eliminar esa parte de la consulta :)

Relacionado, para mí, a veces, solo ejecutar un ANALIZAR nuevo en una tabla también hace que los índices comiencen a usarse repentinamente en producción (es decir, incluso si los índices no son "inválidos", pueden no usarse hasta que se ejecute un ANALIZAR). Extraño.