アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaで登録処理を行ないますが、以下のようなことは
可能なのでしょうか?

環境
DB postgress
java1.4.2

やりたいこと
TBL-A のキーは1から連番の項目Aです。
最大のAを取得し+1した値で登録します。
2人以上が同時に実行した場合二重登録違反が発生する
可能性がありますので二重登録違反が発生すれば再度
最大のAを取得して登録をやり直したい。

この処理がその他のことで長い時間が掛かりますので
排他をかけたくないと思っています。

ご存知であればご教授お願い致します。
(出来るか出来ないかだけでも教えてください)

A 回答 (2件)

>この処理がその他のことで長い時間が掛かりますので


>排他をかけたくないと思っています

最大値を拾って、+1して、insertするのですよね?
それを排他制御なしで行えば、データとインデクス間などでDBに不整合が起こったりしますよ?
一時的に占有してしまうなら、まだ分かりますが。

ロールバック等が発生して、途中の番号に抜けが生じることは許されないのでしょうか?もし途中に欠番が生じてもいいので、順次、ユニークな番号でいいなら、PostgreSQLには、連番型(serialまたはsequence)があります。

http://www.postgresql.jp/document/pg823doc/html/ …

参考URL:http://www.postgresql.jp/document/pg823doc/html/ …
    • good
    • 0

この手の処理は普通は seqence を使うと思います。

sequence はロックしなくても同じ値は絶対に取得されることが無いことが保証されています。ロールバックが発生した場合に、値が欠番になってしまうことがあるのですが、これはしかたがないでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す