libpq
, базовая клиентская библиотека PostgreSQL, имеет опцию keepalives
для включения поддержки активности TCP.
Похоже, что PgAdmin-III не позволяет вам указывать произвольные параметры соединения напрямую, но есть обходной путь.
Когда вы посмотрите на конфигурацию соединения в PgAdmin-III, вы увидите опцию "сервис". Это относится к файлу службы подключения. Чтобы использовать его, создайте ~/.pg_service.conf
с таким содержимым, как:
[myherokudb]
user=myusername
keepalives=1
connect_timeout=20
keepalives_idle=10
и при подключении из PgAdmin-III введите myherokudb
в поле service
.
Это приведет к тому, что PgAdmin-III будет использовать параметры соединения, указанные в служебном файле, включая включение keepalive.
(Если вы работаете в Windows, служебный файл может находиться в другом месте; см. Документацию).
В libpq
нет переменной окружения для управления keepalive, поэтому вы не можете установить ее таким образом, вам придется использовать служебный файл.
Добавление поддержки дополнительных параметров подключения в PgAdmin-III или флажок в параметрах подключения для управления параметром keepalives должен быть довольно тривиальным. Интересно, понял ли Дейв то, о чем вы просили, по поводу вашего предложения о финансировании работы.
Обновление: файл службы ищется в месте, указанном в переменной среды PGSYSCONFDIR
. Если не установлено, по умолчанию используется местоположение для конкретной платформы, которое, похоже, не документировано должным образом для Windows. Я отправлю документацию патча. Документация для .pgpass
показывает его путь как %APPDATA%\postgresql\pgpass.conf
, поэтому ~/.pg_service.conf
должен быть %APPDATA%\postgresql\pg_service.conf
... но это не так.
На самом деле правильный путь:
%APPDATA%\postgresql\.pg_service.conf
Так:
- Пуск-> Выполнить
- `% APPDATA%
- создать каталог "postgresql", если он не существует
- создайте файл ".pg_service.conf" в виде текстового файла с содержимым, приведенным выше (см. примечание ниже по поводу именования файлов)
- В PgAdmin-III введите "localhost" в имя хоста и имя сервиса в поле сервиса.
Я проверил на Windows, и обнаружил, что вы не можете оставить поле host
в PgAdmin-III пустым в Windows. PgAdmin-III, кажется, переопределяет любой хост, указанный в служебном файле, тем, что указан в диалоге соединения. Таким образом, вы не должны включать ключ host
в служебный файл. (Я сообщу об ошибке).
В Windows отключена функция "скрывать расширения файлов для известных типов файлов", поэтому вы не случайно называете это .pg_service.conf.txt
. Если вы не уверены, правильно ли оно названо или нет, проверьте столбец "Тип" в проводнике Windows в виде списка; он будет читать "Текстовый документ", если он неправильно назван .pg_service.conf.txt
, и CONF File
если он правильно назван .pg_service.conf
. Если у вас возникли проблемы с переименованием, отключите "скрывать расширения файлов для известных типов файлов" или используйте удобный текстовый редактор, такой как notepad++, который позволит вам создавать файлы с именами, которые вам нравятся.
Обратите внимание на начальный период (точка) в имени файла. Да, это отличается от pgpass.conf
, и да, это раздражает, граничит с ошибкой.