小编典典

如何用postgresql模拟“插入忽略”和“重复键更新”(sql合并)?

all

一些 SQL 服务器有一个功能,INSERT如果它违反主键/唯一键约束,则会被跳过。例如,MySQL 有INSERT IGNORE.

INSERT IGNORE模拟和ON DUPLICATE KEY UPDATE使用 PostgreSQL的最佳方法是什么?


阅读 54

收藏
2022-07-29

共1个答案

小编典典

尝试进行更新。如果它没有修改任何表示它不存在的行,那么插入。显然,您在事务中执行此操作。

如果您不想将额外的代码放在客户端,您当然可以将其包装在一个函数中。你还需要一个循环来处理这种想法中非常罕见的竞争条件。

文档中有一个示例:http ://www.postgresql.org/docs/9.3/static/plpgsql-control-
structures.html ,示例 40-2 位于底部。

这通常是最简单的方法。你可以用规则做一些魔术,但它可能会变得更加混乱。我会建议任何一天都使用 wrap-in-function 方法。

这适用于单行或几行值。如果您正在处理大量行,例如来自子查询,您最好将其拆分为两个查询,一个用于 INSERT,一个用于
UPDATE(当然,作为适当的连接/子选择 - 无需编写主过滤两次)

2022-07-29