Heim > Datenbank > MySQL-Tutorial > Wie wirkt sich die verzögerte bzw. sofortige Durchsetzung von Primärschlüsseleinschränkungen in PostgreSQL auf das Transaktionsverhalten aus?

Wie wirkt sich die verzögerte bzw. sofortige Durchsetzung von Primärschlüsseleinschränkungen in PostgreSQL auf das Transaktionsverhalten aus?

Barbara Streisand
Freigeben: 2025-01-06 09:18:40
Original
789 Leute haben es durchsucht

How Does PostgreSQL's Deferred vs. Immediate Primary Key Constraint Enforcement Affect Transaction Behavior?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage