Postgres не прекращает соединение даже после смерти клиента - PullRequest
0 голосов
/ 22 октября 2018

У меня есть веб-приложение на 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, он находится в спящем состоянии, но его партнер уже мертв.

Почему это поведение?пожалуйста, объясните, я что-то пропустил?

...