- ベストアンサー
二重登録エラー時の再登録
javaで登録処理を行ないますが、以下のようなことは 可能なのでしょうか? 環境 DB postgress java1.4.2 やりたいこと TBL-A のキーは1から連番の項目Aです。 最大のAを取得し+1した値で登録します。 2人以上が同時に実行した場合二重登録違反が発生する 可能性がありますので二重登録違反が発生すれば再度 最大のAを取得して登録をやり直したい。 この処理がその他のことで長い時間が掛かりますので 排他をかけたくないと思っています。 ご存知であればご教授お願い致します。 (出来るか出来ないかだけでも教えてください)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>この処理がその他のことで長い時間が掛かりますので >排他をかけたくないと思っています 最大値を拾って、+1して、insertするのですよね? それを排他制御なしで行えば、データとインデクス間などでDBに不整合が起こったりしますよ? 一時的に占有してしまうなら、まだ分かりますが。 ロールバック等が発生して、途中の番号に抜けが生じることは許されないのでしょうか?もし途中に欠番が生じてもいいので、順次、ユニークな番号でいいなら、PostgreSQLには、連番型(serialまたはsequence)があります。 http://www.postgresql.jp/document/pg823doc/html/datatype-numeric.html#DATATYPE-SERIAL
その他の回答 (1)
- moritan2
- ベストアンサー率25% (168/670)
この手の処理は普通は seqence を使うと思います。sequence はロックしなくても同じ値は絶対に取得されることが無いことが保証されています。ロールバックが発生した場合に、値が欠番になってしまうことがあるのですが、これはしかたがないでしょう。