PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist besser - eine Ausnahme auslösen oder vorher auf Fehler prüfen

Sie sollten die „Try-and-Catch-Ausnahme“-Methode anwenden, einfach weil Sie es sowieso tun müssen.

Wenn Sie zuerst prüfen, hindert Sie niemand daran, eine Zeile für diesen Benutzer zwischen Ihrer Überprüfung und Ihrer Einfügung einzufügen. In diesem Fall wird der Benutzer in der Tabelle angezeigt, obwohl Ihre Überprüfung ihn nicht gefunden hat.

Ohne in der Lage zu sein, das Prüfen und Einfügen innerhalb einer Art Transaktion auszuführen (damit niemand sonst diesen Benutzer in der Zwischenzeit einfügen kann). Sie können nicht sicher sein, dass die Nicht-Ausnahme funktioniert.

Und obwohl viele DBMS Transaktionsunterstützung bieten, kenne ich keine das wird eine Zeile sperren, die Sie noch einfügen müssen :-)

Wenn Ihre Anwendung so konzipiert ist, dass nur Ihr Prozess Benutzer einfügt (und serialisiert), können Sie natürlich die Check-First-Methode verwenden. Aber ich würde reichlich Kommentare einbringen, dass es überarbeitet werden muss, wenn Sie jemals skalieren.