11

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

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

由于我本质上是以这种方式将数据库视为一个集合,因此我可能正在参与一种反模式。

4

2 回答 2

20

如果您使用的是 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
于 2017-11-28T22:02:02.900 回答
0

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

于 2020-04-07T08:42:53.990 回答