PostgreSQL
Ситуация следующая. Программа начала транзакцию и вдруг, по какой-то из причин, отвалилась.
Программный/аппаратный сбой - не суть. В постгрессе появляются "зомби" транзакции. Как их откатить?
Запрос на очередь выполняемых операций:
SELECT now() - query_start, procpid, current_query
FROM pg_stat_activity
WHERE current_query <> '<IDLE>' order by 1;
выдает:
00:00:00 | 4743 | SELECT now() - query_start, procpid, current_query
01:31:22.839672 | 4343 | <IDLE> in transaction
Запрос на список "зависших" блокировок:
SELECT l.locktype, s.procpid AS process_id, age(now(), s.query_start)
FROM pg_stat_activity s, pg_locks l
LEFT JOIN pg_class ON l.relation = pg_class.oid
WHERE l.pid = s.procpid and l.pid <> pg_backend_pid()
ORDER BY s.query_start;
выдает:
virtualxid | 4343 | 01:36:05.006294
Ну и как откатить эту заразу?