Postgres 11 またはそれ以降、PROCEDURE
を検討してください これにより、トランザクション制御が可能になります。参照:
機能付き 、方法はありません 。 Postgresの関数はアトミック(常にトランザクション内)であり、ロックはトランザクションの終了時に解放されます。
アドバイザリでこれを回避できる可能性がありますロック 。しかし、それらは同じものではありません。競合するすべてのトランザクションは、一緒に実行する必要があります。アドバイザリーロックを認識しない同時アクセスは、パーティーを台無しにします。
dba.SEのコード例:
または、dblinkを使用した自律型トランザクションの「不正行為」でどこかに到達する可能性があります:
または、問題を再評価して、いくつかの個別のトランザクションに分割します。