JDBC を使用した postgres データベースのテーブルのロックに関する簡単な質問です。新しいレコードを追加したいテーブルがありますが、主キーに対してこれを行うには、増加する整数値を使用します。
この列の最大値をJavaで取得し、それを変数として保存して、新しい行を追加するときに新しい主キーとして使用できるようにしたいと考えています。
これは、マルチユーザー システムとしてモデル化されるため、小さな問題が発生します。2 つの場所が同じ最大値を要求するとどうなりますか? もちろん、同じ主キーを追加しようとすると問題が発生します。
キーを取得して新しい行を追加する際の読み取りまたは書き込みを防ぐために、テーブルで排他ロックを使用する必要があることに気付きました。ただし、JDBC でテーブルのロックを処理する方法を見つけることができないようです。標準のトランザクションだけです。
そのような疑似コード:
primaryKey = "SELECT MAX(id) FROM table1;";
primary key++;
//id retrieved again from 2nd source
"INSERT INTO table1 (primaryKey, value 1, value 2);"