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

how to have postgres ignore inserts with a duplicate key but keep going

我正在将内存中集合中的记录数据插入到 postgres 中,并希望数据库忽略数据库中已经存在的任何记录(由于具有相同的主键),但继续我的其余插入.

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

因为我实际上是将数据库作为一个集合来处理,所以我可能会参与反模式。

如果您使用的是 Postgres 9.5 或更新版本(我假设您是,因为它是在 2016 年 1 月发布的),可以使用一个非常有用的 ON CONFLICT 条款:

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

我必须为早期版本的 Postgres 解决这个问题,所以我没有使用包含多行的单个 INSERT 语句,而是使用了多个 INSERT 语句并且 运行 所有这些语句都在一个脚本中并确保错误不会停止脚本(我使用未选中 "stop on error" 的 Adminer)以便执行不抛出错误的脚本,然后插入所有新条目。