В нашем продукте иногда возникает ситуация, когда база данных заблокирована с помощью соединения idle in transaction
.
Я использую postgresql-9.3 (9.4), соединение java через драйвер jdbc.
Все соединениянастроены на автокоммит.
Проблема может быть решена только с помощью SELECT pg_terminate_backend(PID)
. Мне не нравится такое решение, но единственное, что работает, - это перезапуск службы.
Поэтому возникает вопрос, как решить такую проблему, когда я не манипулирую транзакциями вручную. Все подключения к Postgres являются локальными, поэтому я не думаю, что это проблема сети.
Обновление Все верно, без сомнения - есть ошибка приложения.
Представьте себе,что у нас есть запрос:
try(PreparedStatement statement=connection.prepareStatement("update table1 set some_field=1 where id=2")){
statement.executeUpdate();
}
Итак, простой запрос для локального соединения. Соединение активно. Автокоммит это правда. Какая проблема должна возникнуть для такого соединения, чтобы оно было idle in transaction
?
Обновление Спасибо всем за внимание. Проблема была решена путем замены jdbc-драйвера на последнюю версию.