STL_UTILITYTEXT
データベースに対して実行された SELECT 以外の SQL コマンドを取得します。
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_DDLTEXT、STL_QUERYTEXT、SVL_STATEMENTTEXT も参照してください。
STARTTIME および ENDTIME 列を使用すると、一定の時間内に記録されたステートメントがわかります。SQL テキストの長いブロックは、200 文字の長さに分割されます。SEQUENCE 列により、1 つのステートメントに属する複数のフラグメントのテキストを識別できます。
STL_UTILITYTEXT はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。
このテーブルの一部またはすべてのデータは、SYS モニタリングビュー SYS_QUERY_HISTORY でも確認できます。SYS モニタリングビューのデータは、使いやすく理解しやすいようにフォーマットされます。クエリには、SYS モニタリングビューを使用することをお勧めします。
テーブルの列
列名 | データ型 | 説明 |
---|---|---|
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';