STL_UTILITYTEXT - Amazon Redshift

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