Я использую postgres.heroku.com для размещения своих баз данных. Это означает, что у меня нет возможности изменить настройки сервера. Поэтому ответ на этот вопрос мне не поможет. Heroku не хочет менять свои настройки (я связался с ними).
Мне интересно, как лучше всего взломать PgAdmin III, чтобы сохранить связь. Я имею в виду такие вещи, как создание макроса Autohotkey для автоматизации действий пользовательского интерфейса, когда PgAdmin находится в фоновом режиме, или, возможно, использование какого-либо сетевого инструмента для принудительной отправки сетевых сообщений от имени PgAdmins.
Я также получил предложение от 500 $ за то, чтобы кто-то перешел на код PgAmin III. Разработчик PgAdmin, не будет изменять код, только из-за Heroku.
Что я должен делать? PgAdmin превосходит во многих отношениях, он просто имеет этот недостаток.
Ответы:
libpq
лежащая в основе клиентская библиотека PostgreSQL, имеетkeepalives
возможность включить поддержку активности TCP .Похоже, PgAdmin-III не позволяет вам указывать произвольные параметры соединения напрямую, но есть обходной путь.
Когда вы посмотрите на конфигурацию соединения в PgAdmin-III, вы увидите опцию «сервис». Это относится к файлу службы подключения . Чтобы использовать его, создайте
~/.pg_service.conf
содержимое, например:и при подключении из 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
... но это не так.На самом деле правильный путь:
Так:
Я проверил на 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
, и да, это раздражает, граничит с ошибкой.источник
host
в служебном файле пустое поле.