有些SQL Server有一个功能,如果INSERT违反主键/唯一键约束,则跳过它.例如,MySQL有INSERT IGNORE个.

用PostgreSQL模仿INSERT IGNOREON DUPLICATE KEY UPDATE的最佳方式是什么?

推荐答案

try 更新.如果它没有修改任何表示它不存在的行,那么就插入一行.显然,这是在交易中进行的.

如果不想在客户端添加额外的代码,当然可以将其包装到函数中.你还需要一个循环来解决这个 idea 中非常罕见的种族条件.

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

这通常是最简单的方法.你可以用规则来施展魔法,但可能会更混乱.我建议在任何一天都使用wrap-in函数方法.

这适用于单行或少行值.如果要处理大量行(例如子查询中的行),最好将其拆分为两个查询,一个用于插入,另一个用于更新(当然,作为适当的联接/子 Select ,无需编写两次主过滤器)

Postgresql相关问答推荐

如何在Windows中安装sql for golang

如何在PSQL中查询jsonb列包含字符串的嵌套数组

在Docker容器内的Postgres,如何通过Promail将JSON登录到Loki?

有没有一种方法可以在参数中添加密码,并在批处理文件中需要时自动获取密码?

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

仅使用 ssl 连接到 Postgresql 数据库

如何在 postgres where 子句中使用 or 对条件进行组合或分组

在 jOOQ 中使用 $$ 引用字符串

PostgreSQL:如何从另一列的 json 值替换为一列?

如何从 .sql postgresql 备份恢复单个表?

在 Ubuntu 11.04 服务器中启用对 postgresql 的 PHP 支持

我应该使用哪个 postgresql 包?

在 CentOS 上安装 psycopg2 时遇到问题

在远程机器上Restore dump

如何在psql中退出查询结果查看器?

判断materialized视图的上次刷新时间

使用 Homebrew 安装 icu4c 版本 63

判断 PostgreSQL 中的角色是否设置了密码

PL/pgSQL 中的 BREAK 语句

在 pg_restore 期间排除表