Ao trabalhar com o pgAdmin 4 (e, na verdade, vários outros programas que atuam como clientes do banco de dados), a conexão com o servidor é desconectada após cerca de 10 ou 15 minutos de inatividade. Um café e um telefonema, e você recebe uma mensagem semelhante a "Desculpe, a conexão com o banco de dados foi perdida. Você quer que eu tente reconectar?"
E a reconexão do pgAdmin sempre precisa de mais de uma tentativa, e a árvore de objetos que já foi expandida é recolhida... Então, é um pouco chato.
O pgAdmin não parece ter nenhum parâmetro relacionado a esse comportamento. (Parece haver maneiras de alterar alguns tempos limite de conexão , mas eles estão relacionados a como o pgAdmin se comporta em relação ao servidor demorar muito para se conectar).
O que pode ser feito para evitar que o pgAdmin se desconecte do banco de dados?
Divulgação: Esta é realmente uma "pseudo-questão". É um spin-off de outro , que acabou por não estar relacionado com a perda de conectividade... Dado que já tinha uma resposta, acho (não muito humildemente) que vale a pena "perguntar", caso o resposta é útil para alguém.
Eu acho que o problema pode estar relacionado a um roteador (ou, em alguns casos, um firewall com estado ) entre seu cliente pgAdmin e o servidor PostgreSQL.
Isso é bastante comum quando você está em casa (ou no escritório) e seu roteador está executando NAT ( Network Address Translation ). Após algum tempo ocioso, a conexão é fechada pelo roteador . Não é algo feito nem pelo pgAdmin nem pelo PostgreSQL, isso é algo que depende das configurações do roteador,
Se este for o caso, você tem três opções:
Altere a configuração connection_timeout em seu roteador , se isso for viável e você tiver a documentação adequada. Aqui está um exemplo para roteadores Cisco.
Faça o roteador acreditar que a conexão nunca fica ociosa por tempo suficiente. Para fazer isso: altere um parâmetro do servidor
tcp_keep_alives
, chamado :De acordo com a documentação do PostgreSQL sobre Conexões :
A mensagem keepalive deve evitar que a conexão NAT comece a cair.
Tenha em mente a observação na documentação:
Eu realmente não sei quais sistemas "suportam os símbolos TCP_KEEPIDLE ou TCP_KEEPALIVE", mas acho que Linux e Mac devem suportá-los, assim como o Windows, de acordo com a documentação.
Se o seu sistema se desconectar a cada 10 minutos, deve ser prudente ter essa configuração em algo em torno de 9 * 60 = 540 segundos ou menos.
Essa configuração deve ser feita no arquivo do
postgresql.conf
seu servidor. Você também pode testar antes de fazer a alteração no servidor, usando os comandos:que alteraria a configuração da sua conexão atual, ou
o que alteraria a configuração apenas para esta função.
Referência sobre keep-alives: Este vídeo fala sobre como manter suas sessões SSH vivas . Embora este não seja exatamente o mesmo cenário, é equivalente (substitua SSH por pgAdmin).
Basta executar o seguinte comando no banco de dados e tudo pronto.
ALTER ROLE user_name_here IN DATABASE database_name_here SET tcp_keepalives_idle TO '30';