postgresql upsert 使用范例

简介: --pg 9.5 版本支持 "UPSERT" 特性, 这个特性支持 INSERT 语句定义 ON CONFLICT DO UPDATE/IGNORE 属性,当插入 SQL 违反约束的情况下定...
+关注继续查看
--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

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
5天前
|
关系型数据库 MySQL Unix
PHP MySql 安装与连接
PHP MySql 安装与连接
55 0
|
10天前
|
存储 关系型数据库 MySQL
|
11天前
|
关系型数据库 MySQL 数据库
树莓派mysql的安装
树莓派mysql的安装
|
12天前
|
关系型数据库 MySQL 数据安全/隐私保护
mysql解压缩版安装和卸载
mysql解压缩版安装和卸载
17 0
|
16天前
|
SQL 关系型数据库 MySQL
云端MySQL的安装及应用
本场景介绍Linux下MySQL的安装部署及数据库表的增删改查操作。
20 0
|
关系型数据库 PostgreSQL
PostgreSQL 如何实现upsert与新旧数据自动分离
很多业务也行有这样的需求,新的数据会不断的插入,并且可能会有更新。对于更新的数据,需要记录更新前的记录到历史表。 这个需求有点类似于审计需求,即需要对记录变更前后做审计。我以前有写过使用hstore和触发器来满足审计需求的文档,有兴趣的同学可以参考http://blog.163.com/digoa
6654 0
|
关系型数据库 PostgreSQL SQL
postgresql 9.5版本之前实现upsert功能
最近有开发人员问,有没有办法实现在pg9.5版本之前实现upsert功能,现整理如下 --创建测试表,注意此处先不要主键或唯一约束 create table t2 (id int,name varchar(100)); -- pg 在9.
1220 0
|
关系型数据库 PostgreSQL 文件存储
推荐文章
更多