は、私はこのような何かをしたい:がいない場合、つまりPostgreSQL - トランザクションはアトミック性を保証しますか?
SELECT * FROM TABLE where *condition*
... TEST for a row being returned
IF NOT
INSERT the row
は、私が唯一のテーブルに行を挿入したいです。私の懸念は、私が結果セットをテストしている間、その行は実際に別のプロセスによって挿入される可能性があるということです。私はこれを知らないだろうし、2つの行が挿入されます。私はこれが起こることを望んでいない。
トランザクションで2つのステートメントをラップすることを考えましたが、これは答えではないと思われます。トランザクションが実行されている間にテーブルをロックするのと同じような効果があるかどうかは分かりません。したがって、SELECTとINSERTの間に他の挿入を防止できますか?これが問題です。
私はそれを行う最良の方法は、行の列に一意のキーを設定し、重複する挿入を防ぐことだと思う。しかし、私はトランザクションを使用することについての私の考えがすべて有効であるか激変しているのかまだ疑問に思いますか?