STL_UTILITYTEXT - Amazon Redshift

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

STL_UTILITYTEXT

データベースに対して実行された SELECT 以外の SQL コマンドを取得します。

STL_UTILITYTEXTビューをクエリーして、システムで実行された次のSQLステートメントのサブセットをキャプチャします。

  • ABORT、BEGIN、COMMIT、END、ROLLBACK

  • 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 列により、1 つのステートメントに属する複数のフラグメントのテキストを識別できます。

このビュー はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できます。通常のユーザーは自分のデータのみを表示できます。詳細については、「Visibility of data in system tables and views」を参照してください。

テーブルの列

列名 データ型 説明
userid integer エントリを生成したユーザーの ID。
xid bigint トランザクション ID。
pid integer クエリステートメントに関連付けられるプロセス ID。
label character(320) クエリの実行に使用されるファイルの名前、または SET QUERY_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 1 つのステートメントに含まれる文字数が 200 を超える場合、そのステートメントは追加の行に記録されます。シーケンス 0 が最初の行、1 が 2 番目の行、という順番です。
text character(200) 200 文字単位の SQL テキスト。このフィールドには、バックスラッシュ (\\) や改行 (\n) などの特殊文字が含まれる場合があります。

サンプルクエリ

次のクエリは、2012 年 1 月 26 日に実行された「utility」コマンドのテキストを返します。ここでは、いくつかの SET コマンドと 1 つの SHOW ALL コマンドが実行されています。

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 の再構築

STL_UTILITYTEXT の text 列に保存されている SQL を再構築するには、SELECT ステートメントを実行して、text 列の 1 つ以上の部分から SQL を作成します。再構築された 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_UTILITYTEXT の text 列の 2 つの部分 (行) に保存されます。

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

STL_UTILITYTEXT に保存された SQL を再構築するには、次の 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';