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

PostgreSQL erhält und gibt LOCK innerhalb der gespeicherten Funktion frei

In Postgres 11 oder später, erwägen Sie ein PROCEDURE was die Transaktionskontrolle ermöglicht. Siehe:

Mit Funktionen , es gibt keine Möglichkeit . Funktionen in Postgres sind atomar (immer innerhalb einer Transaktion) und Sperren werden am Ende einer Transaktion aufgehoben.

Möglicherweise können Sie dies mit Beratung umgehen Schlösser . Aber das ist nicht dasselbe. Alle konkurrierenden Transaktionen müssen mitspielen. Gleichzeitiger Zugriff ohne Hinweissperren wird die Party verderben.

Codebeispiel auf dba.SE:

Oder Sie könnten etwas erreichen, wenn Sie autonome Transaktionen mit dblink "betrügen":

Oder Sie bewerten Ihr Problem neu und teilen es in mehrere separate Transaktionen auf.