SVL_STATEMENTTEXT - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

SVL_STATEMENTTEXT

Verwenden Sie die Ansicht SVL_STATEMENTTEXT, um einen vollständigen Satz aller SQL-Befehle, die auf dem System ausgeführt wurden, zu erhalten.

Die Ansicht SVL_STATEMENTTEXT enthält die Vereinigung aller Zeilen in den Tabellen STL_DDLTEXT, STL_QUERYTEXT und STL_UTILITYTEXT. Diese Ansicht enthält auch eine Verbindung mit der Tabelle STL_QUERY.

SVL_STATEMENTTEXT ist für alle Benutzer sichtbar. Superuser können alle Zeilen sehen; reguläre Benutzer können nur ihre eigenen Daten sehen. Weitere Informationen finden Sie unter Sichtbarkeit der Daten in Systemtabellen und Ansichten.

Einige oder alle Daten in dieser Tabelle sind auch in der SYS-Überwachungsansicht SYS_QUERY_HISTORY zu finden. Die Daten in der SYS-Überwachungsansicht sind so formatiert, dass sie leichter verwendbar und besser verständlich sind. Wir empfehlen Ihnen, für Ihre Abfragen die SYS-Überwachungsansicht zu verwenden.

Tabellenspalten

Spaltenname Datentyp Beschreibung
userid integer ID des Benutzers, der den Eintrag generiert hat.
xid bigint Mit der Anweisung verbundene Transaktions-ID.
pid integer Prozess-ID für die Anweisung.
label Zeichen (320) Entweder der Name der für die Ausführung verwendeten Datei oder eine mit dem Befehl SET QUERY_GROUP definierte Beschriftung. Wenn die Tabelle nicht dateibasiert ist oder der Parameter QUERY_GROUP nicht eingerichtet ist, ist dieses Feld leer.
starttime timestamp Genaue Uhrzeit in UTC, zu der die Ausführung der Anweisung begonnen wurde, mit 6 Nachkommastellen für Sekundenbruchteile. Beispiel: 2009-06-12 11:29:19.131358
endtime timestamp Genaue Uhrzeit in UTC, zu der die Ausführung der Anweisung abgeschlossen wurde, mit 6 Nachkommastellen für Sekundenbruchteile. Beispiel: 2009-06-12 11:29:19.193640
sequence integer Wenn eine einzelne Anweisung mehr als 200 Zeichen enthält, werden weitere Zeilen für diese Anweisung protokolliert. Sequenz 0 ist die erste Zeile, 1 die zweite usw.
type varchar(10) Typ der SQL-Anweisung: QUERY, DDL oder UTILITY.
Text character(200) SQL-Text, in Schritten von je 200 Zeichen. Diese Feld kann Sonderzeichen wie Backslash (\\) und Zeilenumbruch (\n) enthalten.

Beispielabfrage

Die folgende Abfrage gibt am 16. Juni 2009 ausgeführte DDL-Anweisungen aus:

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

Wiederherstellen von gespeichertem SQL

Um das in der Spalte text von SVL_STATEMENTTEXT gespeicherte SQL wiederherzustellen, führen Sie eine SELECT-Anweisung aus, um SQL von mindestens einem Teil der Spalte text zu erstellen. Bevor Sie das wiederhergestellte SQL ausführen, ersetzen Sie alle Sonderzeichen (\n) durch einen Zeilenumbruch. Das Ergebnis der folgenden SELECT-Anweisung besteht aus Zeilen von wiederhergestelltem SQL im Feld 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 SVL_STATEMENTTEXT where pid=pg_backend_pid();

Mit der folgenden Abfrage werden beispielsweise 3 Spalten ausgewählt. Die Abfrage selbst ist länger als 200 Zeichen und wird in mehreren Teilen in SVL_STATEMENTTEXT gespeichert.

select 1 AS a0123456789012345678901234567890123456789012345678901234567890, 2 AS b0123456789012345678901234567890123456789012345678901234567890, 3 AS b012345678901234567890123456789012345678901234 FROM stl_querytext;

In diesem Beispiel wird die Abfrage in 2 Teilen (Zeilen) in der Spalte text von SVL_STATEMENTTEXT gespeichert.

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;

Um das in SVL_STATEMENTTEXT gespeicherte SQL wiederherzustellen, führen Sie den folgenden SQL-Code aus.

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();

Um das resultierende wiederhergestellte SQL in Ihrem Client zu verwenden, ersetzen Sie alle Sonderzeichen (\n) durch einen Zeilenumbruch.

text ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;