SYS_QUERY_TEXT
SYS_QUERY_TEXT を使用すると、すべてのクエリのクエリテキストを表示できます。各行は、シーケンス番号 0 から始まる最大 4000 文字のクエリのクエリテキストを表します。クエリステートメントに 4000 文字を超える文字が含まれている場合は、各行のシーケンス番号を増やすことで、そのステートメントの追加の行がログに記録されます。このビューでは、DDL、ユーティリティ、Amazon Redshift クエリ、リーダーノードのみのクエリなど、すべてのユーザークエリテキストがログに記録されます。
SYS_QUERY_TEXT はすべてのユーザーが表示可能です。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。
テーブルの列
列名 | データ型 | 説明 |
---|---|---|
user_id | integer | クエリを送信したユーザーの ID。 |
query_id | bigint | クエリ識別子。 |
transaction_id | bigint | ステートメントに関連付けられているトランザクション ID。 |
session_id | integer | クエリを実行しているセッションのプロセス識別子。 |
start_time | timestamp | クエリが開始される時刻。 |
sequence | integer | 1 つのステートメントに含まれる文字数が 4000 を超える場合、そのステートメントは追加の行に記録されます。シーケンス 0 が最初の行、1 が 2 番目の行、という順番です。 |
text | character (4000) | 4000 文字単位の SQL クエリのテキスト。このフィールドには、バックスラッシュ (\) や改行 (\n) などの特殊文字が含まれる場合があります。 |
サンプルクエリ
次のクエリは、実行中とキューに登録されたクエリを返します。
SELECT user_id, query_id, transaction_id, session_id, start_time, sequence, trim(text) as text from sys_query_text ORDER BY sequence;
サンプル出力。
user_id | query_id | transaction_id | session_id | start_time | sequence | text --------+----------+-----------------+------------+----------------------------+----------+---------------------------------------------------------------------------------------------------------------------- 100 | 4 | 1396 | 1073750220 | 2023-04-28 16:44:55.887184 | 0 | SELECT trim(text) as text, sequence FROM sys_query_text WHERE query_id = pg_last_query_id() AND user_id > 1 AND start _time > '2023-04-28 16:44:55.922705+00:00'::timestamp order by sequence;
次のクエリは、データベース内のグループに付与されたアクセス許可、またはグループから取り消されたアクセス許可を返します。
SELECT SPLIT_PART(text, ' ', 1) as grantrevoke, SPLIT_PART((SUBSTRING(text, STRPOS(UPPER(text), 'GROUP'))), ' ', 2) as group, SPLIT_PART((SUBSTRING(text, STRPOS(UPPER(text), ' '))), 'ON', 1) as type, SPLIT_PART((SUBSTRING(text, STRPOS(UPPER(text), 'ON'))), ' ', 2) || ' ' || SPLIT_PART((SUBSTRING(text, STRPOS(UPPER(text), 'ON'))), ' ', 3) as entity FROM SYS_QUERY_TEXT WHERE (text LIKE 'GRANT%' OR text LIKE 'REVOKE%') AND text LIKE '%GROUP%';
+-------------+----------+--------+----------+ | grantrevoke | group | type | entity | +-------------+----------+--------+----------+ | GRANT | bi_group | SELECT | TABLE t1 | | GRANT | bi_group | SELECT | TABLE t1 | | GRANT | bi_group | SELECT | TABLE t1 | | GRANT | bi_group | USAGE | TABLE t1 | | GRANT | bi_group | SELECT | TABLE t1 | | GRANT | bi_group | SELECT | TABLE t1 | +-------------+----------+--------+----------+