2 database postgresql transactions upsert atomicity
我想做这样的事情:
SELECT * FROM TABLE where *condition*
... TEST for a row being returned
IF NOT
INSERT the row
Run Code Online (Sandbox Code Playgroud)
换句话说,我只想在表中插入一行(如果它还没有).我担心的是,当我测试结果集时,该行实际上可能被另一个进程插入.我不知道这会插入两行.我不希望这种情况发生.
我想在交易中包装这两个陈述,但我怀疑这不是答案; 我不知道事务是否具有类似于在执行时锁定表的效果,从而阻止了我的SELECT和INSERT之间的任何其他插入?这是个问题.
我怀疑最好的方法是在行中的列之间设置一个唯一键,以防止重复插入.但是我仍然想知道我关于使用交易的想法是否完全有效或大量关闭?