这个插件安全吗?

时间:2017-10-03 17:20:53

标签: sql postgresql sql-insert table-lock

我有一个项目,我必须定期从远程源插入一堆记录(10分钟内约5k记录)。我有一个临时表,其结构与最终目标表相同(没有主键,id是varchar而不是唯一的),以确保不会有任何重复,我正在使用下一个sql命令:

insert into g_his 
select * 
from tmp_his h 
where not exists (select id, times 
                  from g_his g 
                  where g.id = h.id 
                    and g.times = h.times);

完成此操作后,tmp_his表将被截断。

是否有可能在g_his表上获得隐式锁定并阻止任何其他插入?或者它可能是一个沉重的负荷?或者更好的想法呢?

DB是Postgres 9.6

1 个答案:

答案 0 :(得分:0)

g_his(id, times)上创建一个唯一约束并使用

INSERT INTO g_his 
   SELECT * 
   FROM tmp_his h
ON CONFLICT (id, times) DO NOTHING;