問題タブ [select-for-update]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1480 参照

sql - Postgres SELECT COUNT ... FOR UPDATE

これが私がやろうとしていることの擬似コードです:

並行性の問題を除いて、私はそれを機能させています。同時に複数のセッションから実行すると、両方のセッションが選択され、したがって同じものが更新されます:(

SELECT サブクエリに FOR UPDATE を追加することで、アトミックな 2 番目のクエリを取得できます。しかし、FOR UPDATE は集計関数では許可されていないため、最初のクエリに FOR UPDATE を追加することはできません。

このピースをアトミックトランザクションにするにはどうすればよいですか?

0 投票する
1 に答える
2745 参照

sql - postgres: 競合の挿入時に行を更新し、古い値を返す

テーブルの行を更新するにはクエリが必要ですが、ID が存在しない場合はデフォルト値が挿入されます。また、スレッドの競合状態を回避する必要があります。

ここで問題ないはずの答えを見つけました https://stackoverflow.com/a/7927957/8372336

このクエリの使用:

したがって、更新後に古い値を返す必要があり、スレッドの競合状態を防ぐ必要があると思います。

ただし、行が存在しない場合は挿入を追加し、今回は挿入された値も返す必要があります (古い値は存在しないため意味がありません)。

だから基本的に私は何かをする必要があります

しかし、このようなものが機能するかどうかはわかりません。どうすれば動作させ、競合状態を確認できますか?