Postgresql имеет 3 настройки поддержки активности для управления сброшенными соединениями (в postgresql.conf):
tcp_keepalives_count
tcp_keepalives_idle
tcp_keepalives_interval
По умолчанию это 0.
Мне бы хотелось, чтобы Postgresql сбрасывал клиентские соединения через некоторое время, если клиент потеряет сетевое соединение или перейдет в спящий режим.
В настоящее время я использую эти значения:
tcp_keepalives_count = 1
tcp_keepalives_idle = 60
tcp_keepalives_interval = 60
Я использую PostgreSQL 8.4 в Mac OS X, но, похоже, это не дает никакого эффекта. Мой тест состоит в том, что я блокирую строку в таблице (используя SELECT FOR UPDATE) и отключаю рабочую станцию от сети. Но в Postgresql я все еще вижу, что рабочая станция удерживает блокировку.
Я ожидаю, что по истечении времени (в данном случае 60 секунд) соединение будет разорвано и блокировка будет снята.
Либо я делаю что-то не так, либо я совершенно не понимаю, как это должно работать.
Любой совет?