Es posible desactivar temporalmente un índice en Postgres?


Tengo un índice en una tabla que me gustaría desactivar temporalmente, aunque no puedo encontrar ninguna documentación que sugiera que es posible.

Razón: Tengo un índice que podría estar causando problemas en consultas no relacionadas con cualquiera de las que fue diseñado para acelerar. Es un nuevo índice, y el sistema en su conjunto parece más lento desde que se introdujo. Solo quiero ser capaz de eliminar de forma fiable como el culpable, y esto parece ser la forma más fácil, otra solución sugerencias, así como sugerencias de preguntas mejores, también son bienvenidas.

Author: quodlibetor, 2011-05-27

2 answers

Puede pulsar el catálogo del sistema para desactivar un índice:

update pg_index set indisvalid = false where indexrelid = 'test_pkey'::regclass

Esto significa que el índice no se utilizará para consultas, pero se actualizará. Es uno de los indicadores utilizados para la construcción de índices concurrentes. Tenga en cuenta que solo he hecho una prueba rápida para ver si el índice todavía parece estar actualizado, caveat emptor.

 50
Author: araqnid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-27 12:39:43
begin;
drop index foo_ndx;
explain analyze select * from foo;
rollback;

No creo que haya una manera de deshabilitar solo una, aunque puede hacer esto en una transacción para hacer que la recuperación sea simple. También puede deshabilitar indexscan para deshabilitar todos los índices.

También, asegúrese de que está haciendo explain analyze en sus consultas.

 21
Author: Seth Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-26 23:05:37