PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Quais são as opções disponíveis para identificar e remover os objetos inválidos no Postgres (ex:índices corrompidos)


Se você está se referindo à detecção de índices "inválidos" (mal criados), aparentemente o Postgres pode "falhar" na tentativa de criar um índice, e então o planejador de consultas não os usará, embora eles existam em seu sistema. Esta consulta detectará índices "com falha":

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'

embora eu suponha que detectar índices de tabela TOAST não faria mal, então você pode remover essa parte da consulta :)

Relacionado, para mim, às vezes, apenas executar um novo ANALYZE em uma tabela também faz com que os índices de repente comecem a ser usados ​​​​na produção (ou seja, mesmo que os índices não sejam "inválidos", eles podem não ser utilizados até que um ANALYZE seja executado). Esquisito.