有些SQL Server有一个功能,如果INSERT
违反主键/唯一键约束,则跳过它.例如,MySQL有INSERT IGNORE
个.
用PostgreSQL模仿INSERT IGNORE
和ON DUPLICATE KEY UPDATE
的最佳方式是什么?
有些SQL Server有一个功能,如果INSERT
违反主键/唯一键约束,则跳过它.例如,MySQL有INSERT IGNORE
个.
用PostgreSQL模仿INSERT IGNORE
和ON DUPLICATE KEY UPDATE
的最佳方式是什么?
try 更新.如果它没有修改任何表示它不存在的行,那么就插入一行.显然,这是在交易中进行的.
如果不想在客户端添加额外的代码,当然可以将其包装到函数中.你还需要一个循环来解决这个 idea 中非常罕见的种族条件.
文档中有一个例子:http://www.postgresql.org/docs/9.3/static/plpgsql-control-structures.html,例子40-2在底部.
这通常是最简单的方法.你可以用规则来施展魔法,但可能会更混乱.我建议在任何一天都使用wrap-in函数方法.
这适用于单行或少行值.如果要处理大量行(例如子查询中的行),最好将其拆分为两个查询,一个用于插入,另一个用于更新(当然,作为适当的联接/子 Select ,无需编写两次主过滤器)