SET TRANSACTION

Name

SET TRANSACTION -- setzt die Charakteristika der aktuellen Transaktion

Synopsis

SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }

Beschreibung

Der Befehl SET TRANSACTION setzt den Transaktionsisolationsgrad der aktuellen Transaktion. Er hat auf nachfolgende Transaktionen keine Auswirkung. Dieser Befehl kann nicht mehr ausgeführt werden, nachdem die ersten Anfrage oder der erste Datenmodifikationsbefehl (SELECT, INSERT, DELETE, UPDATE, FETCH, COPY) in einer Transaktion ausgeführt wurde. SET SESSION CHARACTERISTICS setzt den Standard-Transaktionsisolationsgrad für neue Transaktionen in der aktuellen Sitzung. Mit SET TRANSACTION kann er für jede Transaktions einzeln geändert werden.

Der Transaktionsisolationsgrad bestimmt, welche Daten eine Transaktion sehen kann, wenn andere Transaktionen gleichzeitig ablaufen.

READ COMMITTED

Ein Befehl kann nur Daten aus Transaktionen sehen, die abgeschlossen wurden, bevor der Befehl begann. Das ist die Voreinstellung.

SERIALIZABLE

Die aktuelle Transaktion kann nur Daten aus Transaktionen sehen, die abgeschlossen wurden, bevor die erste Anfrage oder der erste Datenmodifikationsbefehl in dieser Transaktion ausgeführt wurde.

Tipp: Intuitiv bedeutet das, dass zwei gleichzeitige Transaktionen die Datenbank in dem Zustand hinterlassen, den sie gehabt hätte, wenn die beiden Transaktionen streng hintereinander ausgeführt worden wären.

Weitere Informationen dazu finden Sie in Kapitel 12.

Hinweise

Der voreingestellte Transaktionsisolationsgrad kann auch mit dem Befehl

SET default_transaction_isolation = 'wert'

und in der Konfigurationsdatei gesetzt werden. Siehe Abschnitt 16.4.

Kompatibilität

Beide Befehle sind im SQL-Standard definiert. Im SQL-Standard ist der Standard-Transaktionsisolationsgrad SERIALIZABLE; in PostgreSQL ist es READ COMMITED, aber das können Sie wie oben beschrieben ändern. In PostgreSQL gibt es nicht die Isolationsgrade READ UNCOMMITTED und REPEATABLE READ. Wegen des Multiversionsmodells in PostgreSQL ist der Grad SERIALIZABLE nicht wirklich serialisierbar. Einzelheiten finden Sie in Kapitel 12.

Der SQL-Standard sieht zwei weitere Transaktionscharakteristika vor, die mit diesen Befehlen gesetzt werden können: Ob die Transaktion nur Lesevorgänge erlaubt und die Größe des Diagnosebereichs. Beide werden von PostgreSQL nicht unterstützt.