0

我有一个项目,我必须从远程源定期插入一堆记录(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 表上获得隐式锁定并阻止任何其他插入?或者它可能是一个沉重的负担?或者有更好的主意吗?

数据库是 Postgres 9.6

4

1 回答 1

0

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

INSERT INTO g_his 
   SELECT * 
   FROM tmp_his h
ON CONFLICT (id, times) DO NOTHING;
于 2017-10-04T07:31:04.743 回答