🧚 Ei! O Beekeeper Studio é uma GUI de banco de dados rápida, moderna e open source Baixar
17 de julho de 2024 Por Matthew Rathbone

Você pode encerrar uma sessão problemática usando a função pg_terminate_backend.

SELECT pg_terminate_backend(PID);

Identificando consultas demoradas

Antes de encerrar uma sessão no PostgreSQL, você precisa saber qual sessão é o alvo. Para encontrar consultas demoradas, use a view pg_stat_activity e filtre pelas colunas state e query_start.

SELECT pid, usename, state, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;

Saída esperada:

pid usename state query duration
1236 appuser active UPDATE orders SET status=’paid’; 00:20:34
1234 postgres active SELECT * FROM users; 00:05:12

Encerrando uma sessão

Depois de identificar a sessão problemática, você pode encerrá-la usando a função pg_terminate_backend.

SELECT pg_terminate_backend(1236);

Este comando encerra à força a conexão com o backend. Ele envia um sinal SIGTERM ao processo e permite que ele termine com segurança, oferecendo uma última chance de fazer a limpeza antes de encerrar. Antes de executar este comando, verifique a natureza das consultas em execução e avalie a saída.

Automatizando o encerramento de sessões

Em ambientes onde problemas com sessões são frequentes, você pode automatizar o encerramento de sessões com um script. Veja um exemplo de script básico para encerrar consultas demoradas:

DO $$ 
DECLARE
    r RECORD;
BEGIN
    FOR r IN
        SELECT pid 
        FROM pg_stat_activity 
        WHERE state = 'active' 
        AND now() - query_start > interval '10 minutes'
    LOOP
        PERFORM pg_terminate_backend(r.pid);
    END LOOP;
END $$;

Este script encerra qualquer sessão ativa que esteja em execução há mais de 10 minutos.

Usando a função pg_cancel_backend

Às vezes, não é desejável encerrar uma sessão, mas apenas cancelar a consulta que ela está executando. Nesses casos, você pode usar a função pg_cancel_backend.

SELECT pg_cancel_backend(PID);

Substitua PID pelo ID do processo da sessão com a consulta que você quer cancelar.

Este comando envia um SIGINT ao processo para cancelar a consulta. É menos drástico que o pg_terminate_backend e permite que a sessão continue ativa, mesmo com a consulta em execução sendo cancelada.

Lembre-se de que tanto pg_cancel_backend quanto pg_terminate_backend exigem acesso de superusuário. Se a sessão que você está tentando encerrar ou cancelar pertence a um superusuário, você precisará de privilégios de superusuário para executar esses comandos com sucesso.

Conclusão

Agora você sabe como encerrar sessões no PostgreSQL. Gerenciar sessões no PostgreSQL é uma habilidade importante para administradores de banco de dados. Ao identificar e encerrar sessões problemáticas de forma eficaz, você mantém melhor o desempenho e a confiabilidade dos seus bancos de dados PostgreSQL. Use esses comandos com cautela, pois o uso indevido pode interromper etapas importantes de processamento de dados e comprometer a integridade dos seus bancos de dados PostgreSQL.

Outros posts que você pode gostar:

Beekeeper Studio é um cliente de banco de dados gratuito e open source

A melhor ferramenta de consultas e edição de SQL que já usei. Tem tudo o que preciso para gerenciar meu banco de dados. - ⭐⭐⭐⭐⭐ Mit

O Beekeeper Studio é rápido, intuitivo e fácil de usar. Ele suporta vários bancos de dados e funciona muito bem no Windows, Mac e Linux.

A versão do Beekeeper para Linux tem 100% dos recursos, sem atalhos e sem concessões.

O que os usuários dizem sobre o Beekeeper Studio

★★★★★
"O Beekeeper Studio substituiu completamente meu antigo fluxo de trabalho com SQL. É rápido, intuitivo e torna o trabalho com bancos de dados agradável de novo."
— Alex K., Desenvolvedor de banco de dados
★★★★★
"Já testei muitas GUIs de banco de dados, mas o Beekeeper encontra o equilíbrio perfeito entre recursos e simplicidade. Simplesmente funciona."
— Sarah M., Engenheira Full Stack

Pronto para melhorar seu fluxo de trabalho com SQL?

download Baixar grátis