CHANGE_SESSION_PRIORITY
CHANGE_SESSION_PRIORITY permite a los superusuarios cambiar de inmediato la prioridad de cualquier sesión en el sistema. Solo se puede ejecutar una sesión, usuario o consulta con la prioridad CRITICAL
.
Sintaxis
CHANGE_SESSION_PRIORITY(pid, priority)
Argumentos
- pid
-
El identificador de proceso de la sesión cuya prioridad se cambia. El valor
-1
hace referencia a la sesión actual. Requiere un valorINTEGER
. - priority
-
La nueva prioridad que asignar a la sesión. Este argumento debe ser una cadena con el valor
CRITICAL
,HIGHEST
,HIGH
,NORMAL
,LOW
oLOWEST
.
Tipo de retorno
Ninguno
Ejemplos
Para devolver el identificador de proceso del proceso del servidor que administra la sesión actual, use el siguiente ejemplo.
SELECT pg_backend_pid();
+----------------+ | pg_backend_pid | +----------------+ | 30311 | +----------------+
En este ejemplo, la prioridad se cambia a LOWEST
para la sesión actual.
SELECT CHANGE_SESSION_PRIORITY(30311, 'Lowest');
+---------------------------------------------------------------------------------------+ | change_session_priority | +---------------------------------------------------------------------------------------+ | Succeeded to change session priority. Changed session (pid:30311) priority to lowest. | +---------------------------------------------------------------------------------------+
En este ejemplo, la prioridad se cambia a HIGH
para la sesión actual.
SELECT CHANGE_SESSION_PRIORITY(-1, 'High');
+-------------------------------------------------------------------------------------------------+ | change_session_priority | +-------------------------------------------------------------------------------------------------+ | Succeeded to change session priority. Changed session (pid:30311) priority from lowest to high. | +-------------------------------------------------------------------------------------------------+
Para crear un procedimiento almacenado que cambie la prioridad de una sesión, use el siguiente ejemplo. El permiso para ejecutar este procedimiento almacenado se concede al usuario de la base de datos test_user
.
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;
A continuación, el usuario de la base de datos denominado test_user
llama al procedimiento.
CALL sp_priority_low(pg_backend_pid());
+------------------------------------------------------+ | result | +------------------------------------------------------+ | Success. Change session (pid:13155) priority to low. | +------------------------------------------------------+