Как остановить зависшую транзакцию в PostgreSQL
Сегодня PostgreSQL является одной из самых популярных СУБД, и, судя по новостям, многие крупные конторы переходят на ее использование с коммерческих продуктов признанных лидеров софтверного фронта. Поэтому думаю, что пошаговое решение ситуации с остановкой зависшей транзакции будет полезно многим. Я столкнулся с таковой, применяя транзакцию, создающую внешний ключ к заблокированной таблице.
Итак, что нам нужно сделать:
- Найти ID заблокированной таблицы;
- Найти ID транзакции, которая зависла;
- Попытаться остановить её корректно, прервать в случае оказания сопротивления.
Допустим, запрос заблокировал таблицу “mytable”. Получим её ID:
К примеру, ID таблицы “mytable” равен 100. Теперь найдём ID транзакции:
Теперь, имея ID транзакции (скажем, он равен 200), попытаемся её остановить:
Если она всё еще существует, значит по-хорошему не хочет, и придется ее прервать: