Qualquer maneira de manter a conexão viva no pgAdmin sem configurá-lo no servidor?

10

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 para essa esta pergunta não me ajuda. Heroku não está disposto a mudar suas configurações (entrei em contato com eles).

Eu estou querendo saber qual seria a melhor maneira de hackear o PgAdmin III para manter a conexão viva. Estou pensando em coisas como criar uma macro Autohotkey para automatizar as ações da interface do usuário enquanto o PgAdmin está em segundo plano, ou talvez usando algum tipo de ferramenta de rede para forçar o envio de mensagens de rede em nome do PgAdmins.

Eu também recebi uma oferta de $ 500 para alguém mudar para o código do PgAmin III. O desenvolvedor do PgAdmin, não irá modificar o código, apenas por causa do Heroku.

O que devo fazer? O PgAdmin é superior em muitos aspectos, apenas tem essa desvantagem.

    
por David 14.03.2014 / 14:55

1 resposta

14

libpq , a biblioteca cliente subjacente do PostgreSQL, possui a opção keepalives para ativar o TCP keepalives .

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.

Quando você olha a configuração de conexão no PgAdmin-III, você verá uma opção de "serviço". Isso se refere ao arquivo do serviço de conexão . Para usá-lo, crie um ~/.pg_service.conf com conteúdo como:

[myherokudb]
user=myusername
keepalives=1
connect_timeout=20
keepalives_idle=10

e ao conectar-se do PgAdmin-III digite myherokudb no campo service .

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á nenhuma variável de ambiente em libpq para controlar os keepalives, então você não pode defini-lo dessa forma, você terá que 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 bem trivial. Eu me pergunto se Dave entendeu o que você estava pedindo por sua oferta para financiar o trabalho.

Atualizar : o arquivo de serviço é consultado no local especificado na variável de ambiente PGSYSCONFDIR . Se não definido, o padrão é 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 , então ~/.pg_service.conf deve ser %APPDATA%\postgresql\pg_service.conf ... mas não parece ser.

Na verdade, o caminho correto é:

%APPDATA%\postgresql\.pg_service.conf

Então:

  • Iniciar- > Executar
  • '% APPDATA%
  • crie o diretório "postgresql" se ele não existir
  • crie o arquivo ".pg_service.conf" como um arquivo de texto com o conteúdo dado acima (veja a nota abaixo da nomenclatura do arquivo)
  • No PgAdmin-III, digite "localhost" no nome do host e o nome do serviço no campo de serviço.

Eu testei no Windows e descobri que você não pode deixar o campo host no PgAdmin-III em branco no Windows. O PgAdmin-III parece sobrescrever qualquer host especificado no arquivo de serviço com o especificado na caixa de diálogo de conexão. Portanto, você não deve incluir uma chave host no arquivo de serviço. (Eu vou relatar um bug).

Tornar "ocultar extensões de arquivo para tipos de arquivo conhecidos" está desativado no Windows, para que você não o chame acidentalmente de .pg_service.conf.txt . Se você não tiver certeza se o nome está correto ou não, verifique a coluna "Tipo" no Windows Explorer no modo de exibição de lista; ele lerá "Documento de texto" se for nomeado incorretamente .pg_service.conf.txt e CONF File se for nomeado corretamente .pg_service.conf . Se você tiver problemas para renomeá-lo, desative "ocultar as extensões de arquivo dos tipos de arquivo conhecidos" ou use um editor de texto sensato como o notepad ++ Isso permitirá que você crie arquivos com o nome que quiser.

Observe o período inicial (ponto) no nome do arquivo. Sim, isso é diferente de pgpass.conf e, sim, isso é irritante, beirando um bug.

    
por 15.03.2014 / 00:34