PostgreSQLデータベースのPL/pgSQL関数によるデッドロックの問題に直面しています。コードブロックでSQLステートメントを見つけてください(単なる例):
BEGIN
UPDATE accounts SET balance = 0 WHERE acct_name like 'A%';
UPDATE accounts SET balance = balance + 100 WHERE acct_name like '%A';
EXCEPTION WHEN OTHERS THEN RAISE NOTICE SQLERRM;
END;
このステートメントの実行中にデッドロックが発生したことがわかりました。しかし、このテーブルを同時に更新しようとしている他のステートメントがあったかどうかはわかりません(ロギングシステムに何も見つからなかったため)。
では、このステートメント内でデッドロックが発生した可能性はありますか?私の知る限り、ステートメント全体をBEGIN
/でブロックした場合END
。同じトランザクションが存在するため、単独でロックしないでください。