Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
Beispiele für gleichzeitige Schreibvorgänge
In den folgenden Pseudocode-Beispielen wird gezeigt, wie Transaktionen entweder fortgesetzt werden oder warten, wenn sie gleichzeitig ausgeführt werden.
Beispiele für gleichzeitige Schreiboperationen
Gleichzeitige COPY-Operationen für dieselbe Tabelle mit serialisierbarer Isolierung
Transaktion 1 kopiert Zeilen in die Tabelle LISTING:
begin; copy listing from ...; end;
Transaktion 2 wird gleichzeitig in einer getrennten Sitzung gestartet und versucht, mehr Zeilen in die Tabelle LISTING zu kopieren. Transaktion 2 muss warten, bis Transaktion 1 die Schreibsperre für die Tabelle LISTING aufhebt. Anschließend kann sie fortgesetzt werden.
begin; [waits] copy listing from ; end;
Dasselbe Verhalten würde auftreten, wenn eine oder beide Transaktionen anstelle eines COPY-Befehls einen INSERT-Befehl enthalten.
Gleichzeitige DELETE-Operationen aus derselben Tabelle mit serialisierbarer Isolierung
Transaktion 1 löscht Zeilen aus einer Tabelle:
begin; delete from listing where ...; end;
Transaktion 2 wird gleichzeitig gestartet und versucht, in derselben Tabelle Zeilen zu löschen. Die Transaktion ist erfolgreich, da sie auf den Abschluss von Transaktion 1 wartet, bevor sie versucht, Zeilen zu löschen.
begin [waits] delete from listing where ; end;
Dasselbe Verhalten würde auftreten, wenn eine oder beide Transaktionen anstelle eines DELETE-Befehls einen UPDATE-Befehl für dieselbe Tabelle enthalten.
Gleichzeitige Transaktionen mit einer Mischung aus Lese- und Schreiboperationen mit serialisierbarer Isolierung
In diesem Beispiel löscht Transaktion 1 Zeilen aus der Tabelle USERS, lädt die Tabelle neu und führt eine COUNT(*)-Abfrage und anschließend ANALYZE aus, bevor sie einen Commit ausführt:
begin; delete one row from USERS table; copy ; select count(*) from users; analyze ; end;
In der Zwischenzeit wird Transaktion 2 gestartet. Diese Transaktion versucht, zusätzliche Zeilen in die Tabelle USERS zu kopieren, die Tabelle zu analysieren und anschließend dieselbe COUNT(*)-Abfrage wie die erste Transaktion auszuführen:
begin; [waits] copy users from ...; select count(*) from users; analyze; end;
Die zweite Transaktion ist erfolgreich, da sie auf den Abschluss der ersten Transaktion warten muss. Die COUNT-Abfrage gibt die Zahl basierend auf dem abgeschlossenen Ladevorgang zurück.
Beispiele für gleichzeitige Schreiboperationen mit Snapshot-Isolierung
Gleichzeitige COPY-Operationen für dieselbe Tabelle mit Snapshot-Isolierung
Transaktion 1 kopiert Zeilen in die Tabelle LISTING:
begin; copy listing from ...; end;
Transaktion 2 wird gleichzeitig in einer getrennten Sitzung gestartet und versucht, mehr Zeilen in die Tabelle LISTING zu kopieren. Transaktion 2 kann gleichzeitig ausgeführt werden, bis eine der Transaktionen Daten in die Zieltabelle listing schreiben muss. Danach werden sie sequenziell ausgeführt.
begin; //When the COPY statement from T1 needs to write data to the table, the COPY statement from T2 waits. copy listing from ...; end;
Dasselbe Verhalten würde auftreten, wenn eine oder beide Transaktionen anstelle eines COPY-Befehls einen INSERT-Befehl enthalten.
Gleichzeitige DELETE-Operationen für dieselbe Tabelle mit Snapshot-Isolierung
Gleichzeitige DELETE- oder UPDATE-Operationen aus derselben Tabelle mit Snapshot-Isolierung werden wie Operationen mit serialisierbarer Isolierung ausgeführt.
Gleichzeitige Transaktionen mit einer Mischung aus Lese- und Schreiboperationen mit Snapshot-Isolierung
Gleichzeitige Transaktionen, die mit gemischten Operationen mit Snapshot-Isolierung ausgeführt werden, werden wie Transaktionen mit gemischten Operationen ausgeführt, die mit serialisierbarer Isolierung ausgeführt werden.