나는 이런 식으로 뭔가를하고 싶지 :이 있지 않은 경우 즉PostgreSQL - 트랜잭션이 원 자성을 보장합니까?
SELECT * FROM TABLE where *condition*
... TEST for a row being returned
IF NOT
INSERT the row
가 난 단지 테이블에 행을 삽입 할. 내 관심사는 결과 집합을 테스트하는 동안 행이 실제로 다른 프로세스에 의해 삽입 될 수 있다는 것입니다. 나는 이것을 알지 못할 것이고 두 개의 행이 삽입 될 것이다. 나는 이것을 원하지 않는다.
나는 거래 내에서 두 문장을 래핑하는 것을 생각했지만 이것이 대답이 아닌 것으로 의심된다. 트랜잭션이 실행되는 동안 테이블을 잠그는 것과 비슷한 효과가 있는지 여부를 모르므로 SELECT와 INSERT 사이의 다른 삽입을 방지 할 수 있습니까? 이것이 문제입니다.
가장 좋은 방법은 단순히 행의 열에 고유 키를 설정하여 중복 삽입을 방지하는 것입니다. 그러나 나는 여전히 거래를 사용하는 것에 대한 나의 생각이 모두 유효하거나 사납게 떨어져 있는지 궁금합니다.