Как удалить зависшую распределённую транзакцию в PostgreSQL
Если при работе с PostgreSQL вы получаете ошибку "БД используется другим пользователем", при этом точно зная, что других подключений к базе нет, возможно у Вас повисла распределенная транзакция.
В случае зависшей распределенной транзакции, вы можете обнаружить, что невозможно удалить или переименовать пострадавшую базу данных и даже перезагрузка сервера не помогает.
Как диагностировать зависшую распределённую транзакцию?
Выполните команду:
SELECT * FROM pg_prepared_xacts;
Как завершить зависшую распределённую транзакцию?
Что бы завершить распределенную транзакцию возьмите её идентификатор из поля gid предыдущего запроса и выполните с ним следующую команду:
ROLLBACK PREPARED 'идентификатор';
Обратите внимание, идентификатор должен быть в одинарных кавычках.