PostgreSQL 的 upsert介绍及语法

PostgreSQL 的 upsert 功能:当记录不存在时,执行插入;否则,进行更新。

注意: ON CONFLICT只在 PostgreSQL 9.5 以上可用。

INSERT INTO table_name(column_list) VALUES(value_list)
ON CONFLICT target action;

target 可以是:

  • (column_name):一个字段名
  • ON CONSTRAINT constraint_name:其中的 constraint_name 可以是一个唯一约束的名字
  • WHERE predicate:带谓语的 WHERE 子句

action 可以是:

  • DO NOTHING:当记录存在时,什么都不做
  • DO UPDATE SET column_1 = value_1, … WHERE condition:当记录存在 时,更新表中的一些字段

实际操作

建表导入模拟数据

drop table if exists "test"."goods";
create table "test"."goods" ("store_cd" int4 not null,"good_cd" varchar(50) not null,"name" varchar(255)
);alter table "test"."goods" add constraint "pr_cd_key" primary key ("store_cd", "good_cd");
insert into "test"."goods" values (101, '1', '张三');
insert into "test"."goods" values (102, '2', '李四');
insert into "test"."goods" values (103, '3', '王五');select * from "test"."goods";

数据存在则更新数据,不存在则插入数据

通过指定约束名称进行upsert

insert into test.goods values ( 104, '4', '赵六' )
on conflict on constraint pr_cd_key do
update set name = '更新'
wheregoods.store_cd = '104' and goods.good_cd = '4'
;

通过指定唯一键字段进行upsert

insert into test.goods values ( 104, '4', '赵六' )
on conflict ( store_cd, good_cd ) do
update set name = '更新'
wheregoods.store_cd = '104' and goods.good_cd = '4'
;

数据存在即不做任何操作,数据不存在则插入

insert into test.goods values ( 104, '4', '赵六' )
on conflict on constraint pr_cd_key do nothing
;

【PostgreSQL】PostgreSQL的upsert功能(insert on conflict do)的用法相关推荐

  1. PostgreSQL的upsert功能(on conflict do)的用法

    ON CONFLICT 只在 PostgreSQL 9.5 以上可用 PostgreSQL 的 upsert 功能就是当执行 INSERT 操作时,如果数据表中不存在对应的记录,PostgreSQL ...

  2. Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析

    相关: <Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析>) <Postgresql源码(70)逻辑复制DecodeXLOG主要流程和 ...

  3. PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)

    标签 PostgreSQL , 10.0 , 后台运行 , pg_background_launch , pg_background_result , pg_background_detach , p ...

  4. PostGreSQL语法及高级功能(2022-06-08补充中)

    PostGreSQL语法及高级功能 1 createdb ## 首先查看help root@dd50f020b9f4:/# createdb --help createdb creates a Pos ...

  5. IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查

    IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查 注意: 每个方法对应单个java类,可以自行进行整理汇总到一个类中 一.Java通过JDBC连接到PostgreSQL数据 ...

  6. PostgreSQL数据库远程连接功能的开启

    PostgreSQL数据库远程连接功能的开启 需要修改连个配置文件,默认位于 安装目录的data子文件夹下. 1.postgresql.conf 修改成监听所有ip地址的连接请求,如下: listen ...

  7. Hologres INSERT ON CONFLICT

    INSERT ON CONFLICT 现有一个业务需求:需要根据关联关系,用B表的数据修改A表中的一个字段. 当看到这个需求的时候,我首先想到的是常用的DB中那种UPDATE...JOIN...的语法 ...

  8. Oracle Sql技巧 - Upsert, Multitable Insert, Undrop

    近期参加OCP培训,讲师说的太快,之前一直是SQLSERVER,很多东西要恶补了. UpSert功能: MERGE <hint> INTO <table_name> USING ...

  9. mysql upsert语法_Mysql - Upsert功能实现

    在看到了mongoTemplate的操作之后,觉得这种东西是很符合我们程序员世界的操作的,但是看到mysql的jdbc之后,瞬间一百万个小泥马从头飘过,所以就想自己实现一个mysql版本的upsert ...

最新文章

  1. 【No.5 类型转换导致的错误】
  2. CSS:给 input 中 type=text 设置CSS样式
  3. Bitcoin0.21版 公链开发(1) Bitcoind 、Bitcoin-qt编译
  4. 详细解释CNN卷积神经网络各层的参数和链接个数的计算
  5. 云炬60s看世界20211205
  6. 【视频】vue指令v-on绑定事件
  7. 形态学图像处理(二)
  8. python读取log文件生成图形表_python提取log文件内容并画出图表
  9. svm gui安装 matlab,svm_matlab_gui 支持向量机matlab工具箱(含资料及gui模式)用于分类和回归预测 - 下载 - 搜珍网...
  10. Hash Table in C
  11. 学习嵌入式和单片机有没有必要,价值体现在哪
  12. 飞机游戏跟踪导弹的算法[C#源码]
  13. 淘宝宝贝类目怎么更换?
  14. 大学入学计算机基础考试考什么,大学入学考试计算机基础考试.docx
  15. 小丸工具箱压制字幕注意
  16. 网页无法复制文字,一个插件解决问题!!!!
  17. 基于二维码的室内定位技术(二)——实现
  18. 在Redhat9上安装Oracle 9.2
  19. 一个假猪套神器:NET CAT-NC
  20. 字符串转成正则表达式

热门文章

  1. Java——entity(实体类)的写法规范
  2. 时钟周期、机器周期、总线周期、指令周期的关系
  3. 用SQL语句更改数据库名
  4. OpenMP编程指南
  5. string.Equals和tring.Compare比较字符串(并且忽略大小写)
  6. 仿QQ好友列表,QListWidget!
  7. BlockingQueue实例
  8. 百度云的产品及使用场景分析
  9. 【学习OpenCV4】案例1:Windows OpenCV C++语言开发环境搭建
  10. Flink-DataStream执行环境和数据读取