SVL_STORED_PROC_MESSAGES
Puede consultar la vista del sistema SVL_STORED_PROC_MESSAGES para obtener información sobre los mensajes de procedimientos almacenados. Los mensajes generados se registran incluso si se cancela la llamada al procedimiento almacenado. Cada llamada de procedimiento almacenado recibe un ID de consulta. Para obtener más información acerca de cómo establecer el nivel mínimo de mensajes registrados, consulte stored_proc_log_min_messages.
SVL_STORED_PROC_MESSAGES es visible para todos los usuarios. Los superusuarios pueden ver todas las filas; los usuarios normales solo pueden ver sus datos. Para obtener más información, consulte Visibilidad de datos en las tablas y vistas de sistema.
Algunos o todos los datos de esta tabla también están en la vista de monitoreo SYS SYS_PROCEDURE_MESSAGES. Los datos de la vista de monitoreo SYS están formateados para que sean más fáciles de usar y entender. Se recomienda utilizar la vista de monitoreo SYS para las consultas.
Columnas de la tabla
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
userid | integer | El ID del usuario cuyos privilegios se utilizaron para ejecutar la instrucción. Si esta llamada se anidó dentro de un procedimiento almacenado de SECURITY DEFINER, entonces este es el id de usuario del propietario de ese procedimiento almacenado. |
session_userid | integer | El ID del usuario que creó la sesión y el invocador de la llamada del procedimiento almacenado de nivel superior. |
pid | integer | El ID del proceso. |
xid | bigint | El ID de la transacción de la consulta de la llamada del procedimiento. |
consulta | integer | El ID de la consulta de la llamada del procedimiento. |
recordtime | Marca de tiempo | La hora en UTC a la que se generó el mensaje. |
loglevel | integer | El valor numérico del nivel de registro del mensaje generado. Valores posibles: 20 para LOG, 30 para INFO, 40 para NOTICE, 50 para WARNING y 60 para EXCEPTION |
loglevel_text | character (10) | Nivel de registro que se corresponde con el valor numérico de loglevel. Valores posibles: LOG, INFO, NOTICE, WARNING y EXCEPTION. |
message | character(1024) | El texto del mensaje generado. |
linenum | integer | El número de línea de la instrucción generada. |
querytext | character(500) | El texto real de la consulta de la llamada del procedimiento. |
etiqueta | character(320) | Ya sea el nombre del archivo utilizado para ejecutar la consulta o una etiqueta definida con un comando SET QUERY_GROUP. Si la consulta no se basa en archivos o si no se establece el parámetro QUERY_GROUP, el valor del campo es el predeterminado. |
aborted | integer | Si el sistema detuvo un procedimiento almacenado o el usuario lo canceló, esta columna tendrá el valor 1. Si la consulta se ejecutó hasta su finalización, esta columna tendrá el valor 0. |
message_xid | bigint | El ID de la transacción del mensaje enviado. |
Consulta de ejemplo
Las siguientes instrucciones SQL muestran cómo utilizar SVL_STORED_PROC_MESSAGES para revisar los mensajes generados.
-- Create and run a stored procedure CREATE OR REPLACE PROCEDURE test_proc1(f1 int) AS $$ BEGIN RAISE INFO 'Log Level: Input f1 is %',f1; RAISE NOTICE 'Notice Level: Input f1 is %',f1; EXECUTE 'select invalid'; RAISE NOTICE 'Should not print this'; EXCEPTION WHEN OTHERS THEN raise exception 'EXCEPTION level: Exception Handling'; END; $$ LANGUAGE plpgsql; -- Call this stored procedure CALL test_proc1(2); -- Show raised messages with level higher than INFO SELECT query, recordtime, loglevel, loglevel_text, trim(message) as message, aborted FROM svl_stored_proc_messages WHERE loglevel > 30 AND query = 193 ORDER BY recordtime; query | recordtime | loglevel | loglevel_text | message | aborted -------+----------------------------+----------+---------------+-------------------------------------+--------- 193 | 2020-03-17 23:57:18.277196 | 40 | NOTICE | Notice Level: Input f1 is 2 | 1 193 | 2020-03-17 23:57:18.277987 | 60 | EXCEPTION | EXCEPTION level: Exception Handling | 1 (2 rows) -- Show raised messages at EXCEPTION level SELECT query, recordtime, loglevel, loglevel_text, trim(message) as message, aborted FROM svl_stored_proc_messages WHERE loglevel_text = 'EXCEPTION' AND query = 193 ORDER BY recordtime; query | recordtime | loglevel | loglevel_text | message | aborted -------+----------------------------+----------+---------------+-------------------------------------+--------- 193 | 2020-03-17 23:57:18.277987 | 60 | EXCEPTION | EXCEPTION level: Exception Handling | 1
Las siguientes instrucciones SQL muestran cómo utilizar SVL_STORED_PROC_MESSAGES para revisar los mensajes generados con la opción SET cuando se crea un procedimiento almacenado. Como test_proc() tiene el nivel de registro mínimo de NOTICE, solo los mensajes de nivel NOTICE, WARNING y EXCEPTION se registran en SVL_STORED_PROC_MESSAGES.
-- Create a stored procedure with minimum log level of NOTICE CREATE OR REPLACE PROCEDURE test_proc() AS $$ BEGIN RAISE LOG 'Raise LOG messages'; RAISE INFO 'Raise INFO messages'; RAISE NOTICE 'Raise NOTICE messages'; RAISE WARNING 'Raise WARNING messages'; RAISE EXCEPTION 'Raise EXCEPTION messages'; RAISE WARNING 'Raise WARNING messages again'; -- not reachable END; $$ LANGUAGE plpgsql SET stored_proc_log_min_messages = NOTICE; -- Call this stored procedure CALL test_proc(); -- Show the raised messages SELECT query, recordtime, loglevel_text, trim(message) as message, aborted FROM svl_stored_proc_messages WHERE query = 149 ORDER BY recordtime; query | recordtime | loglevel_text | message | aborted -------+----------------------------+---------------+--------------------------+--------- 149 | 2020-03-16 21:51:54.847627 | NOTICE | Raise NOTICE messages | 1 149 | 2020-03-16 21:51:54.84766 | WARNING | Raise WARNING messages | 1 149 | 2020-03-16 21:51:54.847668 | EXCEPTION | Raise EXCEPTION messages | 1 (3 rows)