文档章节

postgresql upsert 使用范例

wangxuwei
 wangxuwei
发布于 2016/10/28 00:41
字数 296
阅读 189
收藏 0
--pg 9.5 版本支持 "UPSERT" 特性, 这个特性支持 INSERT 语句定义 ON CONFLICT DO UPDATE/IGNORE 属性,当插入 SQL 违反约束的情况下定义动作,而不抛出错误  
  
--创建测试数据表  
create table t (id int constraint idx_t_id primary key,name varchar(20) constraint cst_name not null);  
insert into t values(1,'rudy');  
postgres=# select * from t;  
 id | name   
----+------  
  1 | rudy  
(1 row)  
  
--根据字段,当id冲突时更新name值  
postgres=# insert into t values(1,'rudy1') ON CONFLICT(id) do update set name=EXCLUDED.name ;  
INSERT 0 1  
postgres=# select * from t;  
 id | name    
----+-------  
  1 | rudy1  
    
  
--也可以直接指定约束名,此时不需要字段,在实际应用中,最好使用字段名  
postgres=# insert into t values(2,'rudy3') ON CONFLICT ON CONSTRAINT idx_t_id do update set name=EXCLUDED.name ;   
INSERT 0 1  
postgres=# select * from t;  
 id | name    
----+-------  
  1 | rudy1  
  2 | rudy3  
(2 rows)  
  
  
--根据where条件选择性更新,由于id没有大于10的数据,故更新0条数据                                                                ^  
postgres=# insert into t values(2,'rudy4') ON CONFLICT ON CONSTRAINT idx_t_id do update set name=EXCLUDED.name where t.id>10 ;  
INSERT 0 0  
postgres=# select * from t;  
 id | name    
----+-------  
  1 | rudy1  
  2 | rudy3  
   
--只插入满足条件的数据行   
postgres=# insert into t values(2,'rudy4'),(3,'rudy3') ON CONFLICT(id) do nothing ;   
INSERT 0 1  
postgres=# select * from t;  
 id | name    
----+-------  
  1 | rudy1  
  2 | rudy3  
  3 | rudy3  

 

本文转载自:http://blog.csdn.net/rudygao/article/details/50498908

wangxuwei
粉丝 27
博文 343
码字总数 137316
作品 0
杭州
其他
私信 提问
PostgreSQL merge insert(upsert/insert into on conflict) 如何区分数据是INSERT还是UPDATE

背景 使用insert into on conflict update语法,可以支持UPSERT的功能,但是到底这条SQL是插入的还是更新的呢?如何判断 通过xmax字段的值是否不为0,可以判断,如果是UPDATE,XMAX里面会填充...

pg小助手
2018/10/19
0
0
Greenplum支持人为多阶段聚合的方法 - 直连segment(PGOPTIONS='-c gp_session_role=utility') Or gp_dist_random('gp_id') Or 多阶段聚合 prefunc

标签 PostgreSQL , 多阶段聚合 , 直连segment , gpdistrandom('gp_id') 背景 聚合操作是分析型场景中最常见的需求之一,在Greenplum中,数据已分布存储,聚合操作需要多阶段执行。 实际上Pos...

德哥
2018/10/05
0
0
PostgreSQL 9.5 发布,带来 UPSERT 等新特性

PostgreSQL 9.5于2016年1月7日正式发布,此版本主要带来了以下几个方面的特性: UPSERT, Row Level Security, and Big Data 1)UPSERT UPSERT是INSERT, ON CONFLICT UPDATE的简写,简而言之就...

玛雅牛
2016/01/08
13.3K
68
PostgreSQL 11 发布:JIT、存储过程事务,并行性能提升

PostgreSQL 11 发布了,PostgreSQL 11 带来了整体性能的改进,具有与超大型数据库和高计算工作负载相关的特定增强功能。此外,PostgreSQL 11 对表分区系统进行了重大改进,存储过程中支持事务...

h4cd
2018/10/19
8.9K
22
阿里云推PostgreSQL 10 高可用版

摘要: 近日,阿里云重磅发布PostgreSQL 10 高可用本地SSD盘版,相比原 9.4 版本又新增了JSONB、BRIN索引、GROUPING SETS/CUBE/ROLLUP、UPSERT等多项功能。 2015年,阿里云宣布正式推出RDS f...

阿里云云栖社区
2018/11/26
29
0

没有更多内容

加载失败,请刷新页面

加载更多

JS实现使用Math.random()函数生成n到m间的随机数字

Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n...

张兴华ZHero
28分钟前
4
0
入门了解Service Mesh + Istio?从本文开始

下周六,深圳,阔别已久的线下技术沙龙要和你见面啦! 现场有Rancher Labs研发经理demo刚刚发布的Rancher 2.3中的Istio、Windows容器、集群模板等功能及使用,还有k3s首次线下workshop,由R...

RancherLabs
30分钟前
5
0
Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed

系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 Archiva 默认的配置下如果你不是使用 snapshot 配置的话,是不允许对仓...

honeymoose
31分钟前
5
0
二维码插件之qrcode.min.js

文件链接百度云地址 https://pan.baidu.com/s/1nWiBuT4Z7WOAMoUEFL8PZg 入门 http://www.jq22.com/jquery-info294 使用jquery.qrcode.min.js实现前台二维码生成(带Logo) https://blog.csd......

木九天
41分钟前
4
0
开源 java CMS - FreeCMS2.8 自定义标签 commentPage

项目地址:http://www.freeteam.cn/ commentPage 根据参数提取评论对象。 参数 说明 siteid 站点id objtype 评论对象类型 objid 评论对象id membername 会员名称 isanonymous 是否匿名 1是 ...

freeteam
41分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部