É possível limitar o tempo limite no servidor Postgres?

16

Defino o tempo limite de conexão e comando como 10 minutos no meu aplicativo (lado do cliente).

Em seguida, meu aplicativo executa uma consulta simples: SELECT pg_sleep(65)

Em alguns servidores, ele funciona bem, mas outros fecham a conexão após 60 segundos.

Poderia ser algum tipo de configuração do servidor PostgreSQL que limita o tempo limite e ignora as configurações do meu cliente?

Andrzej Gis
fonte
Para ver o tempo limite atual:SHOW statement_timeout;
Usuário

Respostas:

26

Sim é possivel

duas configurações mencionadas nos documentos ( idle_in_transaction_session_timeouté novo na versão 9.6x)

  • statement_timeout (inteiro)

    Interrompa qualquer instrução que leve mais do que o número especificado de milissegundos, começando a partir do momento em que o comando chegar ao servidor a partir do cliente. Se log_min_error_statement estiver definido como ERROR ou inferior, a instrução que atingiu o tempo limite também será registrada. Um valor zero (o padrão) desativa isso.

    A configuração de statement_timeout no postgresql.conf não é recomendada porque afetaria todas as sessões.

  • idle_in_transaction_session_timeout (inteiro)

    Encerre qualquer sessão com uma transação aberta que esteja ociosa por mais tempo que a duração especificada em milissegundos. Isso permite que quaisquer bloqueios mantidos por essa sessão sejam liberados e o slot de conexão seja reutilizado; também permite que tuplas visíveis apenas para esta transação sejam aspiradas. Veja a Seção 24.1 para mais detalhes sobre isso.

    O valor padrão de 0 desativa esse recurso.

É importante não configurar o statement_timeoutpostgresql.conf a menos que você queira diversão.

Aqui está um exemplo disso funcionando

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout
Evan Carroll
fonte
Nenhuma configuração está presente no arquivo de configuração, então estou usando padrões. :( Alguma outra idéia?
Andrzej Gis
@gisek com certeza, pode ser algo no nível da rede, na sua pilha de IP local ou no firewall.
Evan Carroll
4

Não está fora da caixa. Seria muito fácil compilar um servidor personalizado que ignorasse suas configurações.

Mas muito mais provável é que suas conexões estejam sendo cortadas por um firewall ou gateway que não gosta de conexões inativas.

Se você tiver acesso ao arquivo de log do servidor, isso deve dar uma boa pista. Se o cliente disser que o servidor encerrou a conexão inesperadamente e o servidor disser que encerrou a conexão inesperadamente, provavelmente há algo entre o cliente e o servidor que está realmente cortando a conexão.

jjanes
fonte
Definitivamente, não é um servidor compilado personalizado - apenas coisas regulares do apt-get. Poderia, por favor, elaborar mais pistas de firewall e gateway? Como posso verificar e corrigir isso?
Andrzej Gis
-2

Sim, é possível. Existem alguns parâmetros de conexão que você precisa definir.

Consulte o link abaixo. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout cancelSignalTimeout

Kavita Patil
fonte
2
Essas são configurações para o lado do cliente de uma conexão com o banco de dados e não configurações que podem ser definidas no servidor para desconectar um cliente. O OP está procurando configurações de tempo limite de conexão no servidor.
John aka hot2use