postgresql upsert 使用范例

--pg支持 update from 语法 

postgres=# create table t1 as select n id,'rudy'||n as name from generate_series(1,3) n;

SELECT 10

postgres=# select * from t1;

 id |  name  

----+--------

  1 | rudy1

  2 | rudy2

  3 | rudy3

(3 rows)

--创建表

postgres=# create table t2 as select * from t1 where 1=0;

SELECT 0

postgres=# insert into t2 values(1,'rudy'),(1,'rudy2'),(1,'rudy3');

INSERT 0 3

postgres=# select * from t1,t2 where t1.id=t2.id;

 id | name  | id | name  

----+-------+----+-------

  1 | rudy1 |  1 | rudy

  1 | rudy1 |  1 | rudy2

  1 | rudy1 |  1 | rudy3

(3 rows)

--注意此时的 update from 类似于对t1表做了distint操作,故只更新一条 

postgres=# update t1 set name=t2.name from t2 where t1.id=t2.id;   

UPDATE 1

postgres=# select distinct t1.id,t1.name from t1,t2 where t1.id=t2.id;                         

 id | name 

----+------

  1 | rudy

时间: 2024-07-31 02:19:49

postgresql upsert 使用范例的相关文章

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

标签 PostgreSQL , upsert , insert on conflict do 背景 PostgreSQL 9.5 引入了一项新功能,UPSERT(insert on conflict do),当插入遇到约束错误时,直接返回,或者改为执行UPDATE. 语法如下 Command: INSERT Description: create new rows in a table Syntax: [ WITH [ RECURSIVE ] with_query [, ...] ] INSER

阿里云RDS PostgreSQL OSS 外部表 - 并行写提速案例

标签 PostgreSQL , oss对象存储 , 阿里云RDS PG , 并行写 , dblink , 异步调用 , 异步任务监控 , OSS外部表 , 数据传输 背景 阿里云RDS PostgreSQL.HybridDB for PostgreSQL提供了一个非常强大的功能,OSS对象存储外部表. 阿里云的RDS PostgreSQL用户可以利用OSS存储冷数据(OSS外部表的形态呈现),实现冷热分离:也可以利用OSS作为数据的中转桥梁,打通其他云端业务,例如HDB FOR PostgreS

数据库案例集锦 - 开发者的《如来神掌》

背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗手,无可柰何,惟隐居深谷,以雕为友.呜呼,生平求一敌手而不可得,诚寂寥难堪也.」 剑冢中,埋的是剑魔独孤求败毕生几个阶段中用过的几柄剑: 利剑无意:第一柄是青光闪闪的利剑,凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋. 软剑无常:第二柄是紫薇软剑,三十岁前所用,误伤义士不祥,悔恨不已,乃弃之深谷. 重剑无锋:第三柄是玄铁重剑,重剑无锋,大巧不工,四十岁之前恃之横行天下. 木剑无俦:第四柄是已腐朽的木剑. 无剑无招:四十岁后,不

(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践

标签 PostgreSQL , 物联网 , 传感器 , lambda , 调度 , 实时 , 流式更新 , UPSERT , insert on conflict do update 背景 越来越多的数据要求实时的分析.聚合.展示最新值.展示异常值.实时的搜索. 例如 金融数据.物联网传感器的数据.网络游戏的在线数据等等. 关于实时搜索,可以参考这篇最佳实践: <行为.审计日志 实时索引/实时搜索 - 最佳实践> 关于海量数据的"写入.共享.存储.计算",以及离线分析,则可

Greenplum merge insert 用法与性能 (insert on conflict)

标签 PostgreSQL , Greenplum , merge insert , insert on conflict , 合并插入 , 有则更新 , 无则插入 背景 PostgreSQL insert on conflict语法非常强大,支持合并写入(当违反某唯一约束时,冲突则更新,不冲突则写入),同时支持流式计算. 流计算例子链接: <PostgreSQL 流式统计 - insert on conflict 实现 流式 UV(distinct), min, max, avg, sum,

HTAP数据库 PostgreSQL 场景与性能测试之 22 - (OLTP) merge insert|upsert|insert on conflict|合并写入

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

postgresql 9.5版本之前实现upsert功能

最近有开发人员问,有没有办法实现在pg9.5版本之前实现upsert功能,现整理如下 --创建测试表,注意此处先不要主键或唯一约束 create table t2 (id int,name varchar(100)); -- pg 在9.5之前实现不存在则插入 -- 现在需要实现,当id字段的值存在时,则更新name字段的值,如果id字段的值不存在,则执行插入 with upsert as (update t2 set name='rudy1' where id=5 returning *) i

PostgreSQL 如何实现upsert与新旧数据自动分离

很多业务也行有这样的需求,新的数据会不断的插入,并且可能会有更新. 对于更新的数据,需要记录更新前的记录到历史表. 这个需求有点类似于审计需求,即需要对记录变更前后做审计. 我以前有写过使用hstore和触发器来满足审计需求的文档,有兴趣的同学可以参考 http://blog.163.com/digoal@126/blog/static/163877040201252575529358/本文的目的并不是审计,而且也可能不期望使用触发器. 还有什么方法呢? PostgreSQL 这么高大上,当然有

migrate Data From PostgreSQL to mongoDB using PG&#039;s copy AND mongoimport

最近有个项目启用了mongoDB主要用作查询缓存.需要将部分PostgreSQL中的数据导入到mongoDB中,写程序来处理的话确实是比较烦.对应格式如下:  还好mongoDB有一个比较好的工具mongoimport可以导入格式csv , tsc , json 等格式的文件. 1. 使用csv格式导入,这里遇到了数据类型的问题,比如某字段需要导入为string类型,进去变成了数值类型.(这里的话应该是可以搞的,暂时没找到好的办法)首先从PostgreSQL导出到文件,由于"createTime