В моей многопоточной программе один поток отбрасывает индексы в таблице (это происходит сначала), а другие потоки вставляют записи в одну и ту же таблицу. Случилось так, что при попытке сброса индекса таблица блокируется, а транзакции вставки становятся «Ожидание».Зачем нужно индексировать падение?
После того, как вы потратили много времени на не-решения проблемы, я нашел реальное решение: совершить сразу после сброса индекса. Когда выдается commit, таблица разблокирована и транзакции вставки завершаются успешно.
Мой вопрос: Почему? У меня создалось впечатление, что индекс Drop - это заявление DDL и поэтому его не нужно делать. Кажется, Postgres доказывает, что я ошибаюсь.
Если вам нужно выпустить COMMIT после удаления индекса, то какой инструмент вы используете использование для подключения к db открывает транзакцию. Вы используете JDBC? Я считаю, что есть переключатель для режима autocommit. 'DROP INDEX' должен вынуть эксклюзивную блокировку достаточно долго, чтобы выполнить команду, и определить, что никакие другие транзакции не используют индекс (в противном случае у вас могли бы быть непоследовательные или неправильные результаты). – bma
Вы правы, это было связано с открытием транзакции. Пришлось совершить. – ADTC