postgresql插入语句时,主键存在就更新,不存在就插入

         今日遇一问题:

解析cime文件,然后获取数据将数据插入到postgresql中,需要在数据库表中删除与新文件对应的id相同的记录,首先想到的是使用in语句进行条件删除,但是数据过多,可能上百万条数据,使用in语句最多上限是1000,执行多条sql会到处多次访问数据库造成性能降低的情况,一时间毫无办法,昨晚百度查询“postgresql插入时,id存在,就插入数据,不存在,就修改” ,查询到postgresql9.5版本及以上版本支持此sql写法,今日做一测试。

1、使用navicat随意找一张数据库表(包含数据就行),导出建表语句及数据,获得sql脚本;

2、修改sql脚本,将原表表名加上_test,全局替换;

3、在navicat中运行修改并替换后的sql脚本;

4、得到测试用的数据,然后新建一条查询:select * from user_table_name;

5、从查询结果中随意复制几条数据作为测试用;

6、复制的数据,其中一条修改主键值(如果表中不存在此主键,就新增记录),其中一条主键不修改(如果表中存在此主键,就修改其余字段),其余字段进行修改,满足这两个条件,主要是为了测试postgresql数据库9.5upsert新特性;

7、编写upsert语句(这里举例是批量的,符合我本人的现场需求),

       INSERT INTO (主键,字段一名称,字段二名称)  VALUES (修改后的id, 字段一值, 字段二值),  (未修改的id,字段一值, 字段二值)  ON CONFLICT(主键) DO UPDATE SET 字段一名称=EXCLUDED.字段一名称,字段二名称=EXCLUDED.字段二名称;

over

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值