У меня есть веб-приложение на Java, которое использует Postgres 9.3.Всякий раз, когда веб-сервер запускается, он блокирует базу данных, используя следующий запрос:
select pg_try_advisory_lock(100);
Но когда я останавливаю сервер, он не освобождает Эксклюзивная блокировка , полученная ранее.
postgres=# SELECT pl.pid,datname,mode, state FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid;
pid | datname | mode | state
-------+----------------------+-----------------+--------
5217 | postgres | AccessShareLock | active
5217 | postgres | AccessShareLock | active
5217 | postgres | ExclusiveLock | active
5217 | postgres | AccessShareLock | active
5217 | postgres | AccessShareLock | active
5217 | postgres | AccessShareLock | active
5217 | postgres | AccessShareLock | active
5217 | postgres | AccessShareLock | active
5217 | postgres | AccessShareLock | active
27669 | oneproduct | ExclusiveLock | idle
(10 rows)
oneproduct - это база данных, которую использует Java-приложение (оно взяло блокировку)
Насколько мне известно, когда клиент Postgres останавливается, убивает или умирает, все блокировки снимаются, поправьте меня, если янеправильно.
когда я проверяю этот PID 27669
, он находится в спящем состоянии, но его партнер уже мертв.
Почему это поведение?пожалуйста, объясните, я что-то пропустил?