SVL_STORED_PROC_MESSAGES - Amazon Redshift

SVL_STORED_PROC_MESSAGES

您可以查询 SVL_STORED_PROC_MESSAGES 系统视图以获取有关存储过程消息的信息。即使存储过程调用已取消,也会记录引发的消息。每个存储过程调用接受一个查询 ID。有关如何设置记录的消息的最低级别的更多信息,请参阅 stored_proc_log_min_messages。

SVL_STORED_PROC_MESSAGES 对所有用户可见。超级用户可以查看所有行;普通用户只能查看其自己的数据。有关更多信息,请参阅 系统表和视图中的数据可见性

此表中的部分或全部数据也可以在 SYS 监控视图 SYS_PROCEDURE_MESSAGES 中找到。SYS 监控视图中的数据经过格式化处理,便于使用和理解。我们建议您使用 SYS 监控视图进行查询。

表列

列名称 数据类型 描述
userid integer 使用其权限来运行语句的用户的 ID。如果此调用嵌套在 SECURITY DEFINER 存储过程中,则这是该存储过程的拥有者的 userid,
session_userid integer 创建会话的用户的 ID,是顶级存储过程调用的调用方。
pid integer 进程 ID。
xid bigint 过程调用查询的事务 ID。
query integer 过程调用的查询 ID。
recordtime timestamp 引发消息的时间 (UTC)。
loglevel integer 引发的消息的日志级别数值。可能的值:20(对于 LOG)、30(对于 INFO)、40(对于 NOTICE)、50(对于 WARNING)、60(对于 EXCEPTION)
loglevel_text character(10) 与 loglevel 中的数值对应的日志级别。可能的值:LOG、INFO、NOTICE、WARNING 和 EXCEPTION。
message character(1024) 引发的消息的文本。
linenum integer 引发的语句的行号。
querytext character(500) 过程调用查询的实际文本。
label character(320) 用于运行查询的文件的名称或使用 SET QUERY_GROUP 命令定义的标签。如果查询并非基于文件或未设置 QUERY_GROUP 参数,则此字段值为默认值。
aborted integer 如果存储过程已由系统停止或已由用户取消,则此列包含 1。如果调用运行完成,则此列包含 0。
message_xid bigint 引发的消息的事务 ID。

示例查询

以下 SQL 语句说明了如何使用 SVL_STORED_PROC_MESSAGES 查看引发的消息。

-- 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

以下 SQL 语句说明了在创建存储过程时如何使用 SVL_STORED_PROC_MESSAGES 和 SET 选项查看引发的消息。由于 test_proc() 的最低日志级别为 NOTICE,因此,仅在 SVL_STORED_PROC_MESSAGES 中记录 NOTICE、WARNING 和 EXCEPTION 级别消息。

-- 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)