如何让postgres忽略带有重复键的插入但继续前进

时间:2017-11-28 21:56:51

标签: sql postgresql clojure sql-insert hugsql

我将内存中的记录数据插入到postgres中,并希望数据库忽略数据库中已存在的任何记录(由于具有相同的主键),但继续使用其余的插入。< / p>

我使用clojure和hugsql,顺便说一句,但我猜测答案可能与语言无关。

由于我基本上以这种方式将数据库视为一组,所以我可能正在参与反模式。

2 个答案:

答案 0 :(得分:11)

如果你正在使用Postgres 9.5或更新版本(我假设你是这样,因为它是在2016年1月发布的),那么你可以使用非常有用的ON CONFLICT cluase:

INSERT INTO mytable (id, col1, col2)
VALUES (123, 'some_value', 'some_other_value')
ON CONFLICT (id) DO NOTHING

答案 1 :(得分:0)

我必须为Postgres的早期版本解决此问题,因此,我没有使用带有多个行的单个INSERT语句,而是使用多个INSERT语句,并在脚本中运行了所有这些语句,并确保错误不会停止脚本(我使用Adminer时未选中“错误停止”),以便执行不引发错误的脚本,然后插入所有新条目。