Considerando que, em um banco de dados PostgreSQL 9.2, tenha sido identificado um lock causado por uma sessão com pid 13652, assinale a opção que apresenta o comando que deve ser executado para eliminar a sessão.
- A)select pg_terminate_backend(13652) from information_schema;
Errada: `information_schema` nao e usado assim e `pg_terminate_backend` deve ser chamado com `SELECT`, nao com `FROM information_schema`.
- B)execute pg_cancel_backend(13652);
Errada: `pg_cancel_backend` so cancela a consulta em execucao, nao elimina a sessao, e `execute` nao e a forma correta aqui.
- C)execute pg_terminate_backend(13652);
Errada: `execute` nao e o comando apropriado para chamar essa funcao no PostgreSQL 9.2.
- D)execute immediate pg_terminate_backend(13652);
Errada: `execute immediate` e sintaxe associada a outras tecnologias, nao ao PostgreSQL.
- E)select pg_terminate_backend(13652);
Certa: `SELECT pg_terminate_backend(13652);` e o comando correto para encerrar a sessao identificada pelo PID.
Gabarito: E
No PostgreSQL, quando voce quer encerrar uma sessao que esta segurando um lock, a funcao classica e `pg_terminate_backend(pid)`. Ela manda o processo do backend parar de vez, encerrando a conexao daquela sessao. Em prova, isso costuma aparecer como uma funcao do proprio PostgreSQL, sem firula de `execute`, `immediate` ou coisas de outra linguagem SQL. O detalhe importante e que essa funcao e chamada com `SELECT`, porque no PostgreSQL muitas funcoes de administracao sao executadas assim. Portanto, para eliminar a sessao com PID 13652, o comando correto e `SELECT pg_terminate_backend(13652);`. Diferenca boa de guardar: `pg_cancel_backend(pid)` apenas cancela a consulta em execucao, mas nao derruba a sessao. Ja `pg_terminate_backend(pid)` encerra o backend de verdade. Em banca CESPE, esse tipo de cobranca adora trocar cancelar por terminar para ver se voce esta atento. A base aqui e a propria documentacao do PostgreSQL: `pg_terminate_backend` encerra a sessao do processo informado, enquanto `pg_cancel_backend` so interrompe a query atual. Em resumo, se a ideia e eliminar a sessao que gerou o lock, voce mata a conexao, nao apenas a instrucao.