Compartilhe que você está se especializando

Em ambientes corporativos, especialmente quando bancos de dados são compartilhados entre múltiplos usuários ou sistemas, é essencial que o controle sobre a execução de comandos SQL seja mantido. Caso contrário, o desempenho do banco de dados como um todo pode ser facilmente comprometido por comandos mal construídos ou por consultas acidentalmente pesadas. Para prevenir esse tipo de situação, o PostgreSQL oferece uma configuração específica chamada statement_timeout.

O que é o statement_timeout

O parâmetro statement_timeout define o tempo máximo (em milissegundos) que uma instrução SQL pode levar para ser executada. Se o tempo limite for atingido, o PostgreSQL cancela automaticamente a execução do comando e retorna um erro.

Isso é especialmente útil para evitar que consultas muito pesadas, mal otimizadas ou acidentais fiquem consumindo recursos do banco indefinidamente. Dentre as principais vantagens em sua implementação:

  • Evita travamentos e lentidão no banco causados por comandos muito demorados;
  • Garante previsibilidade e performance, especialmente em ambientes compartilhados;
  • Permite controle fino por usuário ou grupo, o que é excelente para separar ambientes de produção, testes ou perfis de acesso distintos;
  • Complementa boas práticas de desenvolvimento e governança de banco de dados, sendo uma medida preventiva de segurança operacional.

Aplicando o limite globalmente

Para aplicar a configuração que limita qualquer comando SQL a, no máximo, 2 horas (7.200.000 milissegundos) em todo o ambiente, existem duas abordagens possíveis. Primeiramente, a configuração pode ser feita diretamente no arquivo postgresql.conf, adicionando a linha statement_timeout = 7200000 e, em seguida, reiniciando o servidor. Alternativamente, também é possível conectar-se ao banco de dados e executar o seguinte comando:

ALTER SYSTEM SET statement_timeout = 7200000;
SELECT pg_reload_conf();

Aplicando o limite para um grupo de usuários

Caso você queira limitar apenas para um grupo de usuários (por exemplo um grupo chamado analistas), execute o seguinte comando no PostgreSQL:

ALTER ROLE analistas SET statement_timeout = 7200000;

Esse comando define o tempo limite para qualquer nova sessão iniciada por usuários que pertencem ao role analistas. Ou seja, a partir do próximo login, todos os comandos executados por esses usuários serão interrompidos automaticamente caso ultrapassem 2 horas de execução.

Após aplicar a configuração, você pode confirmar se o parâmetro foi corretamente atribuído ao role com a seguinte consulta:

SELECT rolname, rolconfig FROM pg_roles WHERE rolname = 'analistas';

A coluna rolconfig deve exibir algo semelhante a {statement_timeout=7200000} , confirmando que a configuração está ativa para o role informado.

Considerações finais

A definição de limites de execução para comandos SQL é recomendada como prática em ambientes corporativos. A utilização do statement_timeout por role no PostgreSQL é considerada uma forma eficiente e elegante de garantir que o banco de dados seja protegido contra sobrecargas provocadas por instruções excessivamente longas.

Caso esse tipo de controle ainda não tenha sido implementado, ele deve ser considerado desde já — especialmente quando se trata de roles com acessos mais amplos, como os atribuídos a analistas ou desenvolvedores..

Fontes/Referências

https://postgresql.org/docs/current/runtime-config-client.html
https://stackoverflow.com/questions/24092463/psql-set-default-statement-timeout-as-a-user-in-postgres

Mais Informações

Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria