Sperrt UPDATE ohne WHERE-Klausel eine Tabelle in PostgreSQL?

9

Sperrt die gesamte Tabelle UPDATE(ohne Angabe einer WHEREKlausel) eine Tabelle in PostgreSQL? Verhindert es beispielsweise, dass Zeilen gelöscht / eingefügt werden?

ZB wenn ich laufe UPDATE t1 SET key = 'value' Kann ich erwarten, dass t1während der UPDATEAusführung keine neuen Zeilen eingefügt werden ?

Wenn nein, kann ich damit rechnen, UPDATEdass auch die nach dem Start angezeigten Zeilen aktualisiert werden? (Schlüssel hat keine DEFAULT 'value'in seiner Definition)

Origaminal
quelle
Wenn Zeilen aktualisiert würden, die nach dem Start eingefügt wurden, und es einen Prozess gab, der kontinuierlich Zeilen einfügte, würde das nicht bedeuten, dass die Aktualisierungsanweisung niemals beendet werden würde?
Joe W
guter Punkt! Ja, es ist kaum möglich, UPDATEauf diese Weise neu eingefügte Zeilen zu aktualisieren.
Origaminal
Nein, nur die geänderten Zeilen werden gesperrt. Ein UPDATE sperrt niemals die gesamte Tabelle.
a_horse_with_no_name

Antworten:

15

Ein UPDATE ohne WHERE-Klausel sperrt alle Zeilen in der Tabelle, sperrt jedoch nicht die Tabelle selbst für DML.

Die Zeilen können nicht aus einer anderen Transaktion gelöscht werden, da sie gesperrt sind.

Sie können jedoch problemlos neue Zeilen einfügen (vorausgesetzt, sie verletzen keine Einschränkungen).

Jede Zeile, die nach dem UPDATE eingefügt wird, wird von der UPDATE-Anweisung nicht gesehen und daher nicht geändert.

ein Pferd ohne Name
quelle
Können Sie bitte die Links auf Dokumenten teilen. Ich habe in der offiziellen Dokumentation nicht viel gefunden, was genau über UPDATEohne aussagt WHERE.
Origaminal
Und Zeilen, die von einer anderen Transaktion AKTUALISIERT wurden, schlagen ebenfalls aufgrund der Zeilensperren fehl, richtig?
Tale852150
1
@origaminal Das fragliche Dokument befindet sich unter postgresql.org/docs/current/explicit-locking.html . Die letzten vier werden als "Tabellensperren" bezeichnet - obwohl selbst zulässige Sperren immer noch eine Form der Tabellensperre sind verhindern Sie Versuche, eine exklusive Sperre zu ergreifen.
SilverbackNet