0

ここで同期の問題が発生しています。状況を説明しましょう:

Sendings次の列で構成されるというテーブルがあります。

id   sending_object_id    type   destinatary

id は、postgresql が各テーブルに与える自動シリアル ID です。送信 object_id はカスタム識別子であり、タイプと宛先は...この特定の質問にはあまり関係ありません。

これは、テーブルがデータでどのように見えるかの例です:

  id   sending_object_id    type   destinatary
  1          1               1         A7
  2          1               1         B1
  3          2               2         A1
  4          2               2         A2
  5          3               1         B8
  6          4               1         N1

ご覧のとおり、同じ " object_id" を複数の宛先に送信できます。同期の問題は、2 人の異なるユーザーが 2 つの異なるコンピューターを使用して、新しい送信を挿入しようとすると発生します。

ユーザー Aは、新しい送信情報を導入し、DB エンジンはSelectMax(sending_object_id)、レジストリの新しい send_object_id を作成するために を作成します。

ユーザー Bは、同時に、新しい送信を導入し、別の送信を行いますSelectMax(sending_object_id).

sending_object_id新しいデータを同時に挿入するときに s の重複を避けるにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

1

新しい send_object_id を作成している間はテーブルをロックする必要があります。または、番号が何であるかを正確に気にしない場合は、独自のシーケンスを作成してnextvalを呼び出す必要があります。

于 2013-10-29T11:49:55.463 に答える
1

これにはシーケンスを使用する必要があると思います。どのような場合でも一意であることが保証されています。

于 2013-10-29T11:50:20.293 に答える