首页 > 数据库 >PostgreSQL数据库中插入数据并跳过重复记录

PostgreSQL数据库中插入数据并跳过重复记录

时间:2023-12-27 11:33:27浏览次数:42  
标签:PostgreSQL no 数据库 插入 time date last serial 重复记录

概述:ON CONFLICT 是将新数据插入现有表时处理唯一性冲突的一种方式

快速预览
1. DO UPDATE SET: 重复则更新
2. DO NOTHING: 重复则跳过

先创建表t_daily_stats、并且主键字段由serial_no、date组成,以及其他字段

-- 创建设备每日统计表 
CREATE TABLE t_daily_stats (
    serial_no VARCHAR(50) NOT NULL,
    date DATE NOT NULL,
    online_time INT DEFAULT 0,
    last_status INT NOT NULL,
    update_time TIMESTAMP NOT NULL,
    PRIMARY KEY (serial_no, date) --确保每个设备每天只有一条记录
     );

执行插入测试:

正常插入数据SQL语句

INSERT INTO t_daily_stats(serial_no, "date", online_time, last_status, update_time)
VALUES('0007', '2023-12-26', 0, 0, CURRENT_TIMESTAMP);

查看数据

 可以看到数据已经插入到表中了,如果在插入同样的数据,就会出现重复键异常

主键重复插入报错,解决方案有三个
1. 不插入重复数据
2. 插入重复数据则更新,不存在插入
3. 插入重复数据,则跳过

重复则更新

在实际开发中, 有时会使用到如果存在则更新数据的场景, 这个时候就可以使用 DO UPDATE SET 关键字

SQL语句

 

INSERT INTO t_daily_stats(serial_no, "date", online_time, last_status, update_time)
VALUES('0007', '2023-12-26', 0, 1, CURRENT_TIMESTAMP)
ON CONFLICT(serial_no, "date")
DO UPDATE SET
    last_status = EXCLUDED.last_status

 

查看数据

重复则跳过

INSERT INTO t_daily_stats(serial_no, "date", online_time, last_status, update_time)
VALUES('0007', '2023-12-26', 0, 1, CURRENT_TIMESTAMP)
ON CONFLICT(serial_no, "date")
DO NOTHING

查看结果

 结束

 

 

 

 

 

serial_no, "date"

标签:PostgreSQL,no,数据库,插入,time,date,last,serial,重复记录
From: https://www.cnblogs.com/whyq1314/p/17930217.html

相关文章

  • IntelliJ IDEA 数据访问工具配置 Caché/M 数据库系统
    首先打开IntelliJIDEA的数据库访问工具,然后在数据源中选择:其他下面的InterSystemsIRIS数据源。  配置数据库驱动默认情况下的数据驱动给了9091,这个端口是不对的。IRIS的数据库端口应该是1972。如果你使用的是默认的数据库安装,那么可以参考下面的配置:jdbc:IRIS......
  • (04)Lazarus上连接并显示SQlLite3数据库
    01]去官网https://www.sqlite.org/download.html下载对应的SQlite3.dll32位Lazarus下载sqlite-dll-win-x86-3440200.zip64位Lazarus下载sqlite-dll-win-x64-3440200.zip  下载后,将SQlite3.dll放在工程目录下          ......
  • [对象Owner]SQL Server数据库修改对象Owner
    查看a.查看数据库的ownerselecta.name,suser_sname(a.owner_sid)asonamefromsys.databasesaorderbyonameb.查看job的ownerselecta.name,suser_sname(a.owner_sid)asonamefrommsdb..sysjobsaorderbyonamec.查看endpoint的ownerselecta.name,a.pri......
  • C++ Qt开发:数据库与TableView多组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableView组件与数据库联动的常用方法及灵活运用。在Qt中,通常我们不会在TableView等组件中保存数......
  • Python实战:从数据库到Excel的复杂查询结果处理【上】
    一、背景年底了,运营同学要做报告,于是来找我要数据,而数据来源于MySQL数据库的两个表,两个表中的数据无法一一对应,数据未能通过SQL直接查询出来,需要将表1中的查询结果传参到表2的查询SQL的条件中。数据量较大,若将查询结果复制到excel中,之后再去一一手动匹配的话,这工作量也是巨大的。于......
  • PostgreSQL的安装和卸载
    一、PostgreSQL的卸载查看版本号和系统类别:cat/etc/redhat-release如果是redhat/centos:(yuminstall)yum删除软件包:yumremovepostgresql*删除相关目录文件:rm-rf/var/lib/pgsqlrm-rf/usr/pgsql*删除pg相关用户组/用户userdel-rpostgresgroupdelpostgresrpm包安装的......
  • EF Core助力信创国产数据库
    前言国产数据库作为国产化替代的重要环节,在我国信创产业政策的指引下实现加速发展,我们国产数据库已进入百花齐放的快速发展期,相信接触到政府类等项目的童鞋尤为了解,与此同时我们有一部分也在使用各种开源的ORM都早已支持主流国产数据库,我们也有一部分在使用官方EFCore但没有对国产......
  • 使用pg_dump导出postgresql数据
    使用pg_dump导出postgresql数据参考:如何使用PostgreSQL进行数据迁移和整合?导出命令pg_dump-Uusername-ddbname-a--inserts-fbackup.sql-a只导出数据,不导出schema--inserts将数据转储为INSERT命令,而不是COPY点击查看代码pg_dumpdumpsadatabaseasatext......
  • logstash抽取clickhouse数据库偶现网络错误异常并提示FORMAT TabSeparatedWithNamesAn
     如上图错误信息所示,可以看到第一次sql查询是正常的,在第二次offset偏移的时候报了网络错误。起初的想法就是clickhouse的问题,把sql粘贴出来放入clickHouse中单独执行发现sql并无问题。然后又认为是logstash的问题并分别下载了logstash-7.3.1、logstash-7.17.15、logstash-8.11.......
  • C++ Qt开发:QSqlDatabase数据库组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QSqlDatabase数据库模块的常用方法及灵活运用。QtSQL模块是Qt框架的一部分,它提供了一组类和函数......