Как удалить зависшую распределённую транзакцию в PostgreSQL

Если при работе с PostgreSQL вы получаете ошибку "БД используется другим пользователем", при этом точно зная, что других подключений к базе нет, возможно у Вас повисла распределенная транзакция.

В случае зависшей распределенной транзакции, вы можете обнаружить, что невозможно удалить или переименовать пострадавшую базу данных и даже перезагрузка сервера не помогает.

Как диагностировать зависшую распределённую транзакцию?

Выполните команду:

SELECT * FROM pg_prepared_xacts;

Как завершить зависшую распределённую транзакцию?

Что бы завершить распределенную транзакцию возьмите её идентификатор из поля gid предыдущего запроса и выполните с ним следующую команду:

ROLLBACK PREPARED 'идентификатор';

Обратите внимание, идентификатор должен быть в одинарных кавычках.