Estou usando o postgres.heroku.com para hospedar meus bancos de dados. Isso significa que não tenho como alterar as configurações do servidor. Portanto, a resposta a esta pergunta não me ajuda. Heroku não está disposto a alterar suas configurações (eu entrei em contato com eles).
Gostaria de saber qual seria a melhor maneira de hackear o PgAdmin III para manter a conexão ativa. Estou pensando em coisas como criar uma macro Autohotkey para automatizar ações da interface do usuário enquanto o PgAdmin está em segundo plano, ou talvez usar algum tipo de ferramenta de rede para forçar o envio de mensagens de rede em nome do PgAdmins.
Também recebi uma oferta de 500 $ para alguém mudar para o código do PgAmin III. O desenvolvedor do PgAdmin, não modificará o código, apenas por causa do Heroku.
O que devo fazer? O PgAdmin é superior em muitos aspectos, apenas tem essa desvantagem.
Respostas:
libpq
, a biblioteca cliente subjacente do PostgreSQL, tem akeepalives
opção de ativar os keepalives do TCP .Parece que o PgAdmin-III não permite que você especifique parâmetros de conexão arbitrários diretamente, mas há uma solução alternativa.
Ao observar a configuração da conexão no PgAdmin-III, você verá a opção "service". Isso se refere ao arquivo do serviço de conexão . Para usá-lo, crie um
~/.pg_service.conf
conteúdo com como:e ao conectar a partir do PgAdmin-III, digite
myherokudb
oservice
campo.Isso fará com que o PgAdmin-III use os parâmetros de conexão especificados no arquivo de serviço, incluindo a ativação de keepalives.
(Se você estiver no Windows, o arquivo de serviço pode estar em outro local; consulte a documentação).
Não há variável de ambiente
libpq
para controlar as keepalives; portanto, você não pode defini-lo dessa maneira; precisará usar um arquivo de serviço.Adicionar suporte para parâmetros de conexão adicionais ao PgAdmin-III, ou uma caixa de seleção nas opções de conexão para controlar o parâmetro keepalives, deve ser bastante trivial. Gostaria de saber se Dave entendeu o que você estava pedindo em sua oferta para financiar o trabalho.
Atualização : o arquivo de serviço é procurado no local especificado na
PGSYSCONFDIR
variável de ambiente. Se não estiver definido, o padrão será um local específico da plataforma, que não parece estar documentado corretamente para o Windows. Vou enviar um patch de documentação. A documentação para.pgpass
mostra seu caminho como%APPDATA%\postgresql\pgpass.conf
se, então~/.pg_service.conf
deveria ser%APPDATA%\postgresql\pg_service.conf
... mas não parece ser.De fato, o caminho correto é:
Então:
Testei no Windows e descobri que você não pode deixar o
host
campo no PgAdmin-III em branco no Windows. O PgAdmin-III parece substituir qualquer host especificado no arquivo de serviço pelo especificado na caixa de diálogo de conexão. Portanto, você não deve incluir umahost
chave no arquivo de serviço. (Vou relatar um bug).A opção "ocultar extensões de arquivo para tipos de arquivos conhecidos" está desativada no Windows, para que você não a chame acidentalmente
.pg_service.conf.txt
. Se não tiver certeza se o nome está correto ou não, verifique a coluna "Tipo" no Windows Explorer na exibição de lista; ele lerá "Documento de texto" se for nomeado incorretamente.pg_service.conf.txt
eCONF File
se for nomeado corretamente.pg_service.conf
. Se você tiver problemas para renomeá-lo, desative "ocultar extensões de arquivo para tipos de arquivos conhecidos" ou use um editor de texto sensato, como o bloco de notas ++, que permitirá criar arquivos com o nome que desejar.Observe o ponto inicial (ponto) no nome do arquivo. Sim, isso é diferente e
pgpass.conf
, sim, é irritante, na fronteira com um bug.fonte
host
o arquivo de serviço em branco.