CHANGE_SESSION_PRIORITY
CHANGE_SESSION_PRIORITY permite que superusuários alterem imediatamente a prioridade de qualquer sessão no sistema. Somente uma consulta, uma sessão ou um usuário pode ser executado com a prioridade CRITICAL
.
Sintaxe
CHANGE_SESSION_PRIORITY(pid, priority)
Argumentos
- pid
-
O identificador de processo da sessão cuja prioridade é alterada. O valor
-1
se refere à sessão atual. Requer um valorINTEGER
. - priority
-
A nova prioridade que será atribuída à sessão. Esse argumento deve ser uma string com o valor
CRITICAL
,HIGHEST
,HIGH
,NORMAL
,LOW
ouLOWEST
.
Tipo de retorno
Nenhum
Exemplos
Para retornar o identificador do processo do servidor que lida com a sessão atual, use o exemplo a seguir.
SELECT pg_backend_pid();
+----------------+ | pg_backend_pid | +----------------+ | 30311 | +----------------+
Neste exemplo, a prioridade da sessão atual é alterada para LOWEST
.
SELECT CHANGE_SESSION_PRIORITY(30311, 'Lowest');
+---------------------------------------------------------------------------------------+ | change_session_priority | +---------------------------------------------------------------------------------------+ | Succeeded to change session priority. Changed session (pid:30311) priority to lowest. | +---------------------------------------------------------------------------------------+
Neste exemplo, a prioridade da sessão atual é alterada para HIGH
.
SELECT CHANGE_SESSION_PRIORITY(-1, 'High');
+-------------------------------------------------------------------------------------------------+ | change_session_priority | +-------------------------------------------------------------------------------------------------+ | Succeeded to change session priority. Changed session (pid:30311) priority from lowest to high. | +-------------------------------------------------------------------------------------------------+
Para criar um procedimento armazenado que altera a prioridade de uma sessão, use o exemplo a seguir. A permissão para executar esse procedimento armazenado é concedida ao usuário test_user
do banco de dados.
CREATE OR REPLACE PROCEDURE sp_priority_low(pid IN int, result OUT varchar) AS $$ BEGIN SELECT CHANGE_SESSION_PRIORITY(pid, 'low') into result; END; $$ LANGUAGE plpgsql SECURITY DEFINER; GRANT EXECUTE ON PROCEDURE sp_priority_low(int) TO test_user;
Depois, o usuário do banco de dados denominado test_user
chama o procedimento.
CALL sp_priority_low(pg_backend_pid());
+------------------------------------------------------+ | result | +------------------------------------------------------+ | Success. Change session (pid:13155) priority to low. | +------------------------------------------------------+