<div dir="ltr">お世話になっております。あきやまと申します。<br><br>一意制約違反発生時の更新処理について教えてください。<br><br>[動作環境]<br>・S2Container 2.4.45<br>・PostgreSQL 9.0.13<br><br>現在、以下の処理を実装しようとしていますが、<br><br>1.トランザクション開始(トランザクションA)<br>2.SELECT FOR UPDATEでAテーブルからレコードを取得<br>3.トランザクション開始(トランザクションB)<br>4.BテーブルのレコードをSELECT FOR UPDATEで取得<br> →取得できなかった場合、レコードを登録<br>  →一意制約違反が発生した場合、レコードを更新<br>5.トランザクションBをコミット<br>6.CテーブルのレコードをSELECT FOR UPDATEで取得<br> →取得できなかった場合、レコードを登録<br>  →一意制約違反が発生した場合、レコードを更新<br>7.トランザクションCをコミット<br>8.トランザクションAをコミット<br><br>項番4で一意制約違反が発生した場合にレコードを更新したいのですが、<br>「既にロールバックとしてマークされています」とログ出力され、更新できなくなり困っています。<br>項番1から8までをtry-catchして、項番1から再トライすれば、うまくいくのですが、<br>項番6でも一意制約違反の可能性があり、その場合try-catchをネストしないといけないので、できれば避けたいです。<br>何かいい対処方法があれば、ご教授の程よろしくお願いします。<br></div>