Postgresql 实现数据不存在插入,存在更新
2022/3/18 19:27:34
本文主要是介绍Postgresql 实现数据不存在插入,存在更新,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
有时候需要往表里增量插入数据,此时可能会出现唯一键重复而没法插入的错误。尤其是一些存储过程中经常出现【无则插入,有则更新】的逻辑。PostgreSQL9.5 开始库提供了Upset方法可以轻松实现此逻辑:
语法形式
INSERT INTO 表名 VALUES ('值1', '值2', ...) ON CONFLICT ON CONSTRAINT 唯一或排除约束名 DO UPDATE SET 列1='值', 列2='值', ...; --或 INSERT INTO 表名 VALUES ('值1', '值2', ...) ON CONFLICT(唯一或排除约束字段名) DO UPDATE SET 列1='值', 列2='值', ...;
示例
--若要从person表往TEST表更新全部记录,不重复插入,重复则更新 INSERT INTO TEST select * from person on conflict on constraint pk_test_deviceid_eventtype do update set updatetime = excluded.updatetime, msec = excluded.msec;
实践
create table test(id int constraint idx_t_id primary key,name varchar(20) constraint cst_name not null); --插入测试数据 insert into test values(1,'ALMJ'); insert into test values(2,'Tom'); insert into test values(3,'Cat');
创建一个test表,并给id字段设置唯一键约束。看看此表的约束信息
select table_name, constraint_name, constraint_type from information_schema.table_constraints where table_name='test'; --result /** test idx_t_id PRIMARY KEY test 2200_21059_1_not_null CHECK test 2200_21059_2_not_null CHECK **/
更新一条重复id的记录看
insert into test values(1,'阿力木') ON CONFLICT(id) do update set name=EXCLUDED.name ; --result /*** insert into test values(1,'阿力木') ON CONFLICT(id) do update set name=EXCLUDED.name > Affected rows: 1 > 时间: 0.006s ***/
成功了,或者可能重复的时候不要报错也不要更新,自动跳过
insert into test values(2,'汤姆'),(3,'凯特') ON CONFLICT(id) do nothing ; --result /*** insert into test values(2,'汤姆'),(3,'凯特') ON CONFLICT(id) do nothing > Affected rows: 0 > 时间: 0s id name 2 Tom 3 Cat 1 阿力木 ***/
这篇关于Postgresql 实现数据不存在插入,存在更新的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-05快速清空 PostgreSQL 数据库中的所有表格,让你的数据库重新焕然一新!
- 2024-01-04在PostgreSQL中创建角色:判断角色是否存在并创建
- 2023-05-16PostgreSQL一站式插件推荐 -- pg_enterprise_views
- 2022-11-22PostgreSQL 实时位置跟踪
- 2022-11-22如何将PostgreSQL插件移植到openGauss
- 2022-11-11PostgreSQL:修改数据库用户的密码
- 2022-11-06Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
- 2022-10-27Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
- 2022-10-11PostgreSql安装(Windows10版本)
- 2022-09-13PostgreSQL-Network Address类型操作和函数