sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLはストアド関数内のLOCKを取得して解放します

    Postgres 11 またはそれ以降、PROCEDUREを検討してください これにより、トランザクション制御が可能になります。参照:

    機能付き 、方法はありません 。 Postgresの関数はアトミック(常にトランザクション内)であり、ロックはトランザクションの終了時に解放されます。

    アドバイザリでこれを回避できる可能性がありますロック 。しかし、それらは同じものではありません。競合するすべてのトランザクションは、一緒に実行する必要があります。アドバイザリーロックを認識しない同時アクセスは、パーティーを台無しにします。

    dba.SEのコード例:

    または、dblinkを使用した自律型トランザクションの「不正行為」でどこかに到達する可能性があります:

    または、問題を再評価して、いくつかの個別のトランザクションに分割します。



    1. ストアドプロシージャでカスタマイズされたオプションを設定する

    2. Doctrine列が見つかりません:1054不明な列's.features' in'field list''

    3. 値を前の行の値と比較するMySQLクエリ

    4. postgres日時から秒を引く方法