2016-11-30 3 views
3

私は2つのテーブルAとBが台帳に関連しています。 AとBの両方で並行して多くのトランザクションが発生します。直面ロックテーブルがトランザクションコミットまで

問題は次のとおりです。

[28] - A insert success for source entity_id: id001 
[28] - B update success for destination entity_id: id002 
[28] - A insert success for destination entity_id: id002 
[71] - B update success for source entity_id: id001     
[28] - commit success for [28] with amount 100 

スレッド71回の更新テーブルBスレッド28前の元帳に変更をコミットします。

これは、プロセスがテーブルを使用しているときにpostgresがテーブルをロックするために発生しています。

  1. 現在のスレッドでコミットが完了するまでスレッドを待機させるにはどうすればよいですか?
  2. ポストグルでレコードをロックするには? (テーブル内の他のアカウントにユーザーがアクセスできるように)

答えて

1

Postgresはデフォルトでレコードをロックします。同じものについてはdocsを参照してください。

ログは、最後のログはトランザクションをコミットした後でなければなりません。トランザクションが完了するたびに、待機中のスレッドがすぐに引き継がれ、それがログがそのように表示された理由でなければなりません。

関連する問題