PostgreSQL ON CONFLICT冲突时进行额外操作

news/2024/7/9 20:36:50 标签: postgresql, 数据库

前言

使用ON CONFLICT需设置键,否则报错“没有匹配ON CONFLICT说明的唯一或者排除约束”。


PostgreSQL的ON CONFLICT子句提供了多种冲突处理类型,用于在插入操作中处理冲突。以下是常见的几种类型:

  1. DO NOTHING:在发生冲突时不执行任何操作,保持原有数据不变。
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO NOTHING;

组合键示例, column1、column2需组合键

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1, column2) DO NOTHING;
  1. DO UPDATE SET:在发生冲突时执行更新操作,可以指定要更新的字段和更新的值。

EXCLUDED是一个特殊的关键字,用于引用插入操作中的冲突行。此处冲突时,column2的值更新为value2

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2;

这是一个冲突时属性自增的示例,不受传入的value2的值的影响

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = table_name.column2 + 1;

更新多个值示例,column3是table_name中的属性

INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = table_name.column2 + 1, column3 = table_name.column3 - 1;
  1. DO UPDATE WHERE:在发生冲突时执行更新操作,并根据条件进行更新。
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2 WHERE column2 < EXCLUDED.column2;
  1. DO NOTHING RETURNING:在发生冲突时不执行任何操作,若不冲突返回插入的行。
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO NOTHING RETURNING *;
  1. DO UPDATE SET ... WHERE ... RETURNING:在发生冲突时执行更新操作,并根据条件进行更新,并返回更新的行。
INSERT INTO table_name (column1, column2)
VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE SET column2 = EXCLUDED.column2 WHERE column2 < EXCLUDED.column2 RETURNING *;

http://www.niftyadmin.cn/n/5053220.html

相关文章

redis部署与管理

目录 一、关系数据库与非关系型数据库&#xff1a; 1. 关系型数据库&#xff1a; 2.非关系型数据库&#xff1a; 二、关系型数据库和非关系型数据库区别&#xff1a; &#xff08;1&#xff09;数据存储方式不同&#xff1a; &#xff08;2&#xff09;扩展方式不同&#xf…

vue3+eleement plus日历选择季度

<template><div class"el-quarter-wrap"><el-popover width"280" v-model"visible"><template #reference><el-input v-model"quarterDate" placeholder"请选择季度" clearable :prefix-icon&qu…

HTML5+CSS3小实例:脉冲波纹催眠动画特效

实例:脉冲波纹催眠动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&qu…

正点原子lwIP学习笔记——NTP实时时间实验

1. NTP简介 NTP&#xff08;Network Time Protocol&#xff09;网络时间协议基于UDP&#xff0c;用于网络时间同步的协议&#xff0c;使网 络中的计算机时钟同步到UTC&#xff0c;再配合各个时区的偏移调整就能实现精准同步对时功能。 NTP 服务器&#xff08;Network Time Pr…

Mac电脑剪切键Command-X键失灵

在Mac上&#xff0c;Command-X键的剪切功能失效可能是由于键盘快捷键设置出现错误或者剪切的目标文件处于只读状态。 可以尝试以下方法进行解决&#xff1a; 1.检查键盘快捷键设置&#xff1a;转到Apple菜单 > 系统偏好设置 > 辅助功能 > 键盘 > 快捷键&#xff0c…

线性代数+分治:446E

https://codeforces.com/problemset/problem/446/E 把官方题解翻译了一遍 考虑暴力&#xff0c;肯定想到dp&#xff0c;然后变成矩阵。设用代替 &#xff08;这样子数之间的差值不会变化&#xff0c;但对于问题的处理能方便很多&#xff09; 我们先令&#xff08;也就是初始…

Apache DolphinScheduler 在奇富科技的首个调度异地部署实践

奇富科技&#xff08;原360数科&#xff09;是人工智能驱动的信贷科技服务平台&#xff0c;致力于凭借智能服务、AI研究及应用、安全科技&#xff0c;赋能金融机构提质增效&#xff0c;助推普惠金融高质量发展&#xff0c;让更多人享受到安全便捷的金融科技服务。作为国内领先的…

四川玖璨公司抖音收费多少?

首先&#xff0c;从公司背景来看&#xff0c;四川玖璨电子商务有限公司是一家专注于电子商务领域的公司&#xff0c;经验丰富且有一支优秀的团队。作为一家专业的抖音培训公司&#xff0c;他们推出的抖音培训项目肯定是建立在自己经验与实践的基础上&#xff0c;并且对市场的变…