STL_UTILITYTEXT - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

STL_UTILITYTEXT

擷取資料庫上執行的非SELECTSQL命令文字。

查詢 STL_UTILITYTEXT 檢視以擷取下列在系統上執行的SQL陳述式子集:

  • ABORT, BEGIN, COMMIT, END, ROLLBACK

  • ANALYZE

  • CALL

  • CANCEL

  • COMMENT

  • CREATE, ALTER, DROP DATABASE

  • CREATE, ALTER, DROP USER

  • EXPLAIN

  • GRANT, REVOKE

  • LOCK

  • RESET

  • SET

  • SHOW

  • TRUNCATE

另請參閱 STL_DDLTEXTSTL_QUERYTEXTSVL_STATEMENTTEXT

使用 STARTTIME和 ENDTIME資料欄,找出在指定期間內記錄的陳述式。長SQL文字區塊會細分為 200 個字元長的行;該SEQUENCE欄會識別屬於單一陳述式的文字片段。

STL所有使用者都可看見 _UTILITYTEXT。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱系統資料表和檢視中資料的可見性

此資料表中的部分或全部資料也可以在SYS監控檢視 中找到SYS_QUERY_HISTORY。SYS 監控檢視中的資料已格式化,以便於使用和理解。建議您針對查詢使用SYS監控檢視。

資料表欄

欄名稱 資料類型 描述
userid integer 產生項目的使用者之 ID。
xid bigint 交易 ID。
pid integer 與查詢陳述式相關聯的處理程序 ID。
label character(320) 用於執行查詢的檔案名稱,或使用 QUERY_ SET GROUP 命令定義的標籤。如果查詢不是以檔案為基礎,或未設定 QUERY_GROUP 參數,則此欄位為空白。
starttime timestamp UTC 查詢開始的時間。總時間包括佇列和執行。秒小數部分的精確度為 6 位元。例如:2009-06-12 11:29:19.131358
endtime timestamp UTC 查詢完成的時間。總時間包括佇列和執行。秒小數部分的精確度為 6 位元。例如:2009-06-12 11:29:19.131358
sequence integer 當單一陳述式包含不只 200 個字元時,會將該陳述式的其他資料列記錄下來。序列 0 是第一列,1 是第二列,以此類推。
text character(200) SQL 文字,以 200 個字元遞增。此欄位可能包含反斜線 (\\) 和換行符號 (\n) 等特殊字元。

範例查詢

下列查詢會傳回已在 2012 年 1 月 26 日執行之「公用程式」命令的文字。在此情況下,執行了某些SET命令和 SHOWALL命令:

select starttime, sequence, rtrim(text) from stl_utilitytext where starttime like '2012-01-26%' order by starttime, sequence; starttime | sequence | rtrim ---------------------------+-----+---------------------------------- 2012-01-26 13:05:52.529235 | 0 | show all; 2012-01-26 13:20:31.660255 | 0 | SET query_group to '' 2012-01-26 13:20:54.956131 | 0 | SET query_group to 'soldunsold.sql' ...

重建已儲存 SQL

若要重建SQL存放在 STL_ text欄中的 UTILITYTEXT,請執行SELECT陳述式,SQL從text欄中的 1 個或多個部分建立 。在執行重建的 之前SQL,請將任何 (\n) 特殊字元取代為新行。下列SELECT陳述式的結果是在 query_statement SQL欄位中重建的資料列。

SELECT LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement FROM stl_utilitytext GROUP BY xid order by xid;

例如,下列查詢會將 query_group 設為一個零的字串。查詢本身超過 200 個字元,並部分存放在 STL_ 中UTILITYTEXT。

set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';

在此範例中,查詢會儲存在 STL_ text欄中的 2 個部分 (列) 中UTILITYTEXT。

select query, sequence, text from stl_utilitytext where query=pg_last_query_id() order by query desc, sequence limit 10;
starttime | sequence | text ----------------------------+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2019-07-23 22:55:34.926198 | 0 | set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000 2019-07-23 22:55:34.926198 | 1 | 000000';

若要重建SQL存放在 STL_ 中的 UTILITYTEXT,請執行下列 SQL。

select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement from stl_utilitytext where query=pg_last_query_id();

若要在用戶端SQL中使用產生的重建,請將任何 (\n) 特殊字元取代為新的行。

query_statement ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';