STL_UTILITYTEXT
Captura o texto de comandos não SELECT SQL executados no banco de dados.
Consulte a visualização STL_UTILITYTEXT para capturar o seguinte subconjunto de instruções SQL que foram executadas no sistema:
-
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
Consulte também STL_DDLTEXT, STL_QUERYTEXT e SVL_STATEMENTTEXT.
Use as colunas STARTTIME e ENDTIME para saber quais instruções foram registradas em um determinado período. Os blocos longos de texto SQL são quebrados em linhas de 200 caracteres; a coluna SEQUENCE identifica os fragmentos de texto que pertencem a uma única instrução.
STL_UTILITYTEXT permanece visível para todos os usuários. Os superusuários podem ver todas as linhas; usuários regulares podem ver somente seus próprios dados. Para ter mais informações, consulte Visibilidade de dados em tabelas e visualizações de sistema.
Alguns ou todos os dados nessa tabela também podem ser encontrados na exibição de monitoramento SYS SYS_QUERY_HISTORY. Os dados na exibição de monitoramento SYS são formatados para serem mais fáceis de usar e compreender. É recomendável usar a exibição de monitoramento SYS nas consultas.
Colunas da tabela
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
userid | inteiro | O ID do usuário que gerou a entrada. |
xid | bigint | ID da transação. |
pid | inteiro | O ID do processo associado à instrução da consulta. |
label | character(320) | O nome do arquivo usado para executar a consulta ou um rótulo definido com o comando SET QUERY_GROUP. Se a consulta não for baseada em arquivos ou o parâmetro QUERY_GROUP não estiver definido, o valor deste campo será branco. |
starttime | timestamp | O horário (em UTC) de início da consulta. O tempo total inclui consultas e execução, com seis dígitos de precisão para segundos fracionários. Por exemplo: 2009-06-12 11:29:19.131358 . |
endtime | timestamp | Horário em UTC em que a consulta foi finalizada. O tempo total inclui consultas e execução, com seis dígitos de precisão para segundos fracionários. Por exemplo: 2009-06-12 11:29:19.131358 . |
sequence | inteiro | Quando uma única instrução contém mais de 200 caracteres, são registradas linhas adicionais para essa instrução. O valor 0 da sequência é a primeira linha, 1 é a segunda, e assim por diante. |
text | character(200) | O texto em SQL, em incrementos de 200 caracteres. Esse campo pode conter caracteres especiais como barra invertida (\\ ) e nova linha (\n ). |
Consultas de exemplo
A consulta a seguir retorna o texto dos comandos de “utilitário” que foram executados em 26 de janeiro de 2012. Nesse caso, alguns comandos SET e um SHOW ALL foram executados:
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' ...
Reconstrução de SQL armazenado
Para reconstruir o SQL armazenado na coluna text
de STL_UTILITYTEXT, execute uma instrução SELECT para criar SQL a partir de uma ou mais partes na coluna text
. Antes de executar o SQL reconstruído, substitua os caracteres especiais por uma nova linha (\n
). O resultado da instrução SELECT a seguir são linhas de SQL reconstruído no campo query_statement
.
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;
Por exemplo, a consulta a seguir define query_group como uma string de zeros. A consulta em si tem mais de 200 caracteres e é armazenada em partes em STL_UTILITYTEXT.
set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';
Nesse exemplo, a consulta é armazenada em duas partes (linhas) na coluna text
de STL_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';
Para reconstruir o SQL armazenado em STL_UTILITYTEXT, execute o seguinte 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();
Para usar o SQL reconstruído resultante em seu cliente, substitua os caracteres especiais por uma nova linha (\n
).
query_statement ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000';