web-dev-qa-db-fra.com

Est-il possible de désactiver temporairement un index dans Postgres?

J'ai un index sur une table que je voudrais désactiver temporairement, mais je ne trouve aucune documentation suggérant que c'est possible, cependant.

Raison: J'ai un index qui pourrait causer des problèmes dans les requêtes sans rapport avec ceux qu'il a été conçu pour accélérer. C'est un nouvel index, et le système dans son ensemble semble plus lent depuis son introduction. Je veux juste pouvoir l'éliminer de manière fiable en tant que coupable, et cela semble être le moyen le plus simple, d'autres suggestions de solutions, ainsi que de meilleures suggestions de questions, sont également les bienvenues.

43
quodlibetor

Vous pouvez pousser le catalogue système pour désactiver un index:

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

Cela signifie que l'index ne sera pas utilisé pour les requêtes mais sera toujours mis à jour. C'est l'un des indicateurs utilisés pour la construction d'index simultanés. Notez que je n'ai fait qu'un test rapide pour voir si l'index semble toujours être mis à jour, caveat emptor.

64
araqnid
begin;
drop index foo_ndx;
explain analyze select * from foo;
rollback;

Je ne pense pas qu'il existe un moyen de désactiver un seul, bien que vous puissiez le faire dans une transaction pour rendre la récupération de celui-ci morte simple. Vous pouvez également désactiver l'analyse d'index pour désactiver tous les index.

Assurez-vous également que vous faites explain analyze sur vos requêtes.

29
Seth Robertson