SVL_STATEMENTTEXT
SVL_STATEMENTTEXT ビューを使用して、システムで実行されたすべての SQL コマンドの完全な記録を取得します。
SVL_STATEMENTTEXT ビューにはSTL_DDLTEXT、STL_QUERYTEXT、STL_UTILITYTEXT テーブルのすべての行の統合が含まれます。また、このビューには STL_QUERY テーブルの結合も含まれます。
SVL_STATEMENTTEXT はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。
このテーブルの一部またはすべてのデータは、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 | ステートメントの実行が開始された正確な時間。秒の小数部の精度 (6 桁) を使用します。例: 2009-06-12 11:29:19.131358 |
endtime | timestamp | ステートメントの実行が終了した正確な時間。秒の小数部の精度 (6 桁) を使用します。例: 2009-06-12 11:29:19.193640 |
sequence | integer | 1 つのステートメントに含まれる文字数が 200 を超える場合、そのステートメントは追加の行に記録されます。シーケンス 0 が最初の行、1 が 2 番目の行、という順番です。 |
type | varchar(10) | SQL ステートメントのタイプ。QUERY 、DDL 、または UTILITY です。 |
text | character(200) | 200 文字単位の SQL テキスト。このフィールドには、バックスラッシュ (\\ ) や改行 (\n ) などの特殊文字が含まれる場合があります。 |
サンプルクエリ
次のクエリでは、2009 年 6 月 16 日に実行された DDL ステートメントを返します。
select starttime, type, rtrim(text) from svl_statementtext where starttime like '2009-06-16%' and type='DDL' order by starttime asc; starttime | type | rtrim ---------------------------|------|-------------------------------- 2009-06-16 10:36:50.625097 | DDL | create table ddltest(c1 int); 2009-06-16 15:02:16.006341 | DDL | drop view alltickitjoin; 2009-06-16 15:02:23.65285 | DDL | drop table sales; 2009-06-16 15:02:24.548928 | DDL | drop table listing; 2009-06-16 15:02:25.536655 | DDL | drop table event; ...
ストアド SQL の再構築
SVL_STATEMENTTEXT の 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 SVL_STATEMENTTEXT where pid=pg_backend_pid();
例えば、次のクエリでは 3 つの列を選択します。クエリ自体は 200 文字より長く、SVL_STATEMENTTEXT の部分に保存されます。
select 1 AS a0123456789012345678901234567890123456789012345678901234567890, 2 AS b0123456789012345678901234567890123456789012345678901234567890, 3 AS b012345678901234567890123456789012345678901234 FROM stl_querytext;
この例では、クエリは SVL_STATEMENTTEXT の text
列の 2 つの部分 (行) に保存されます。
select sequence, text from SVL_STATEMENTTEXT where pid = pg_backend_pid() order by starttime, sequence;
sequence | text ----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0 | select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234 1 | \nFROM stl_querytext;
STL_STATEMENTTEXT に保存された SQL を再構築するには、次の SQL を実行します。
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS text from SVL_STATEMENTTEXT where pid=pg_backend_pid();
再構築された SQL をクライアントで使用するには、特殊文字 (\n
) を改行に置き換えます。
text ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;