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,只有 NOTICE、WARNING 和 EXCEPTION 層級訊息會記錄在 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)