Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: <IDLE> in transaction
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Majestio

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


Ну и как откатить эту заразу? :(
Litkevich Yuriy
может есть что-нибудь типа sweep в Firebird?
Но это из инструментария администратора
Majestio
Цитата(Litkevich Yuriy @ 17.4.2013, 21:01) *
может есть что-нибудь типа sweep в Firebird?
Но это из инструментария администратора


Кой че нашел, позже потестирую:

select pg_cancel_backend(pid);
select pg_terminate_backend(pid);
Majestio
Вроде кое-чего вырисовывается :p Cделал статейку для себя, смотрите, может и вам пригодится.
Одно "но", пока еще на практике не успел обкатать, в процессе короче ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.