Возможно ли временно отключить индекс в Postgres?
У меня есть один индекс в таблице, который я бы хотел временно отключить, но я не могу найти документацию, предполагающую, что это возможно.
Причина. У меня есть индекс, который может вызвать проблемы в запросах, не связанных с тем, который был разработан для ускорения. Это новый индекс, и система в целом кажется более медленной с момента ее появления. Я просто хочу быть в состоянии надежно устранить его как виновника, и это кажется самым простым способом, также приветствуются другие предложения по решению, а также лучшие предложения по поводу вопросов.
Ответы
Ответ 1
Вы можете совать системный каталог, чтобы отключить индекс:
update pg_index set indisvalid = false where indexrelid = 'test_pkey'::regclass
Это означает, что индекс не будет использоваться для запросов, но будет по-прежнему обновляться. Это один из флагов, используемых для одновременного построения индекса. Обратите внимание, что я только сделал быстрый тест, чтобы увидеть, обновляется ли индекс по-прежнему, caveat emptor.
Ответ 2
begin;
drop index foo_ndx;
explain analyze select * from foo;
rollback;
Я не думаю, что есть способ отключить только один, хотя вы можете сделать это в транзакции, чтобы сделать восстановление из нее простым. Вы также можете отключить indexscan для отключения всех индексов.
Кроме того, убедитесь, что вы выполняете explain analyze
в своих запросах.