Це загальна відповідь Постгреса, а не характерна для героїки
(Проста дурна відповідь на це питання може бути ... просто перезапустіть postgresql. Припустимо, що це не бажано чи не є варіантом ...)
Знайдіть PID, запустивши цей sql:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(Запит може потребувати коригування залежно від версії постгресів - з часом просто виберіть * з pg_stat_activity). Ви знайдете pid у першому (лівому) стовпці, і перший (верхній) рядок, ймовірно, буде запитом, який ви хочете завершити. Я припускаю, що pid на 1234 нижче.
Ви можете скасувати запит через SQL (тобто без доступу до оболонки), якщо він є вашим або у вас є супер користувацький доступ:
select pg_cancel_backend(1234);
Це "дружнє" прохання скасувати запит 1234, і з деякою удачею він зникне через деякий час. Зрештою, це більш ефективно:
select pg_terminate_backend(1234);
Якщо у вас є дозвіл на доступ до оболонки, права доступу до root або postgres, ви також можете це зробити з оболонки. Для "скасування" можна зробити:
kill -INT 1234
і "припинити", просто:
kill 1234
НЕ:
kill -9 1234
... що часто призведе до того, що весь сервер Postgres спалахне полум’ям, тоді ви також можете перезапустити postgres. Postgres досить надійний, тому дані не будуть пошкоджені, але я рекомендую ні в якому разі не використовувати "kill -9" :-)
Тривалий "простой у транзакції" часто означає, що транзакція не була припинена з "фіксацією" або "відкатом", що означає, що додаток є помилковим або не належним чином розроблено для роботи з транзакційними базами даних. Слід уникати тривалого "простою в операції", оскільки це також може спричинити великі проблеми з роботою.