Durchsetzung von DEFERRABLE- vs. IMMEDIATE-Primärschlüsseleinschränkungen
Die Durchsetzung einer verzögerten/aufschiebbaren eindeutigen oder Primärschlüsseleinschränkung in PostgreSQL hängt davon ab Einstellungen und die Art des ausgeführten Vorgangs.
Für Einschränkungen, die als DEFERRABLE definiert sind ZUERST SOFORT, die Eindeutigkeit wird nach der Ausführung jeder SQL-Anweisung überprüft. Es ist jedoch wichtig zu beachten, dass das Handbuch für UNIQUE- oder PRIMARY KEY-Einschränkungen besagt, dass Eindeutigkeitsprüfungen unmittelbar nach jedem Befehl erfolgen, unabhängig von der Aufschiebbarkeitseinstellung.
Das in der Abfrage bereitgestellte Beispiel zeigt, dass es sich um eine UPDATE-Anweisung handelt Das Ändern mehrerer Zeilen darf erfolgreich sein, auch wenn die Einschränkung als PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE definiert ist. Dies liegt daran, dass die Prüfung nach der Ausführung der Anweisung erfolgt und in diesem Fall die Einschränkung immer noch erfüllt ist.
Im Gegensatz dazu kann ein Daten ändernder CTE, der versucht, Zeilen in mehreren Tabellen zu aktualisieren, fehlschlagen, wenn die PK-Einschränkung erfüllt ist nicht aufgeschoben. Dies liegt daran, dass jede Unteranweisung im CTE gleichzeitig ausgeführt wird und ohne Snapshot-Isolation die Reihenfolge der Aktualisierungen nicht vorhersehbar ist. Infolgedessen kann es zu einer Verletzung des eindeutigen Schlüssels kommen.
Wenn mehrere UPDATE-Anweisungen innerhalb einer einzelnen Transaktion ausgeführt werden, ohne Einschränkungen explizit als zurückgestellt festzulegen, kann es zu einer UNIQUE-Verletzung kommen, wenn die Einschränkung nicht zurückgestellt wird. Dies liegt daran, dass die Prüfungen nach jeder Anweisung durchgeführt werden und die Einschränkung während Zwischenzuständen der Transaktion verletzt werden kann.
Daher ist es offensichtlich, dass das Verhalten von nicht aufschiebbaren UNIQUE- oder PRIMARY KEY-Einschränkungen in PostgreSQL so ist im Wesentlichen fehlerhaft. Die Prüfungen werden nach jeder Zeilenaktualisierung durchgeführt, was in bestimmten Szenarien zu unerwarteten Fehlern führen kann. Die Problemumgehung für dieses Problem besteht jedoch darin, eine DEFERRABLE-Einschränkung zu verwenden, die mehr Flexibilität bei der Durchsetzung der Eindeutigkeit bietet und unnötige Fehler verhindern kann.
Das obige ist der detaillierte Inhalt vonWie wirkt sich die verzögerte bzw. sofortige Durchsetzung von Primärschlüsseleinschränkungen in PostgreSQL auf das Transaktionsverhalten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!