首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在postgres INSERT ON CONFLICT DO UPDATE中返回列的旧值?

在PostgreSQL中,可以使用INSERT ON CONFLICT DO UPDATE语句来处理冲突并更新行数据。如果你想要在这个过程中返回列的旧值,可以使用RETURNING子句。

具体步骤如下:

  1. 创建一个包含冲突列的表,并插入一些数据作为示例:
代码语言:txt
复制
CREATE TABLE my_table (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) UNIQUE,
    age INTEGER
);

INSERT INTO my_table (name, age) VALUES ('John', 25), ('Jane', 30);
  1. 使用INSERT ON CONFLICT DO UPDATE语句来处理冲突并返回旧值:
代码语言:txt
复制
INSERT INTO my_table (name, age)
VALUES ('John', 35)
ON CONFLICT (name) DO UPDATE SET age = EXCLUDED.age
RETURNING age;

在这个例子中,我们尝试插入一个具有相同名称的行。如果冲突发生,我们使用DO UPDATE子句来更新age列的值为新值。然后,使用RETURNING子句返回age列的旧值。

  1. 运行上述SQL语句后,将返回旧值:
代码语言:txt
复制
 age
-----
  25

这样,你就可以在INSERT ON CONFLICT DO UPDATE语句中返回列的旧值了。

对于PostgreSQL的更多信息和详细介绍,你可以参考腾讯云的云数据库 PostgreSQL 文档:https://cloud.tencent.com/document/product/409/16762

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微信为什么使用 SQLite 保存聊天记录?

开发者可以使用空null来代替,因为unknown和null布尔是一样。 在INSERTUPDATE语句中,字面量true和false可以大大提高values和set子句可读性。...INSERT INTO target SELECT * FROM source ON CONFLICT (id) DO UPDATE SET val = excluded.val...INSERT INTO target SELECT * FROM source WHERE true ON CONFLICT (id) DO UPDATE SET val = excluded.val...0:同样记录insertupdate、delete和merge操作错误信息 (“DML error logging”) 1:On conflict语句不能紧挨查询from语句,如果需要,可以添加...派生数据库表(Select语句返回查询结果集)列名可以通过SELECT语句、FROM语句或WITH语句来进行改变 2:据我所知,也许可以通过可更新视图或派生来模拟该功能。

2.5K20

PostgreSQL 基础与实践

域完整性则是通过对表做一些额外限制,限制数据类型、检查约束、设置默认、是否允许空以及值域范围等。...命令行界面 首先我们讲 psql 路径加入环境变量以便后续使用,我使用是 zsh,所以在 ~/.zshrc 文件添加如下内容: # postgres export PATH=${PATH}:/Applications.../Postgres.app/Contents/Versions/14/bin 之后在终端输入 psql,就可以访问 PostgreSQL 命令行界面了。...) VALUES ('Yu', 'ZHANG', 'MALE', DATE '1997-06-06') ON CONFLICT (id) DO NOTHING; --- 当发生冲突时更新指定字段 INSERT...(id) DO UPDATE SET email = EXCLUDED.email; DQL 操作 可以通过 SELECT 命令来对表进行查询,最常用查看全表命令为 --- 查看表全部数据 SELECT

1.2K20

微信为什么使用 SQLite 保存聊天记录?

开发者可以使用空null来代替,因为unknown和null布尔是一样。 在INSERTUPDATE语句中,字面量true和false可以大大提高values和set子句可读性。...INSERT INTO target SELECT *   FROM source     ON CONFLICT (id)     DO UPDATE SET val = excluded.val 根据说明文档...INSERT INTO target SELECT *   FROM source  WHERE true     ON CONFLICT (id)     DO UPDATE SET val = excluded.val...图片 0:同样记录insertupdate、delete和merge操作错误信息 (“DML error logging”) 1:On conflict语句不能紧挨查询from语句,如果需要,...派生数据库表(Select语句返回查询结果集)列名可以通过SELECT语句、FROM语句或WITH语句来进行改变 2:据我所知,也许可以通过可更新视图或派生来模拟该功能。

2.1K10

微信为什么使用 SQLite 保存聊天记录?

开发者可以使用空null来代替,因为unknown和null布尔是一样。 在INSERTUPDATE语句中,字面量true和false可以大大提高values和set子句可读性。...INSERT INTO target SELECT * FROM source ON CONFLICT (id) DO UPDATE SET val = excluded.val...INSERT INTO target SELECT * FROM source WHERE true ON CONFLICT (id) DO UPDATE SET val = excluded.val...图片 0:同样记录insertupdate、delete和merge操作错误信息 (“DML error logging”) 1:On conflict语句不能紧挨查询from语句,如果需要,...派生数据库表(Select语句返回查询结果集)列名可以通过SELECT语句、FROM语句或WITH语句来进行改变 2:据我所知,也许可以通过可更新视图或派生来模拟该功能。

8010

微信为什么使用 SQLite 保存聊天记录?

开发者可以使用空null来代替,因为unknown和null布尔是一样。 在INSERTUPDATE语句中,字面量true和false可以大大提高values和set子句可读性。...INSERT INTO target SELECT *   FROM source     ON CONFLICT (id)     DO UPDATE SET val = excluded.val 根据说明文档...INSERT INTO target SELECT *   FROM source  WHERE true     ON CONFLICT (id)     DO UPDATE SET val = excluded.val...图片 0:同样记录insertupdate、delete和merge操作错误信息 (“DML error logging”) 1:On conflict语句不能紧挨查询from语句,如果需要,...派生数据库表(Select语句返回查询结果集)列名可以通过SELECT语句、FROM语句或WITH语句来进行改变 2:据我所知,也许可以通过可更新视图或派生来模拟该功能。

1.8K10

微信为什么使用 SQLite 保存聊天记录?

开发者可以使用空null来代替,因为unknown和null布尔是一样。 在INSERTUPDATE语句中,字面量true和false可以大大提高values和set子句可读性。...INSERT INTO target SELECT *   FROM source     ON CONFLICT (id)     DO UPDATE SET val = excluded.val 根据说明文档...INSERT INTO target SELECT *   FROM source  WHERE true     ON CONFLICT (id)     DO UPDATE SET val = excluded.val...0:同样记录insertupdate、delete和merge操作错误信息 (“DML error logging”) 1:On conflict语句不能紧挨查询from语句,如果需要,可以添加...派生数据库表(Select语句返回查询结果集)列名可以通过SELECT语句、FROM语句或WITH语句来进行改变 2:据我所知,也许可以通过可更新视图或派生来模拟该功能。

1.8K50

【测试SQLite】测试SQLite支持SQL语句分类

最大是在同一 ORDER BY 返回最后一个。如果组没有非 NULL ,则聚合 max() 返回 NULL。 min(X) min() 聚合函数返回组中所有最小非 NULL 。...最小是在 ORDER BY 中出现第一个非 NULL 。如果组没有非 NULL ,则聚合 min() 返回 NULL。...如果插入操作会导致冲突目标的唯一性约束失败,则插入会被省略,相应DO NOTHING或DO UPDATE操作将代替执行。ON CONFLICT子句按指定顺序检查。...UPSERT不会干预失败NOT NULL、CHECK或外键约束,也不会干预使用触发器实现约束。 DO UPDATE中表达式列名是插入前列原始未更改。...UPSERT不会干预失败NOT NULL、CHECK或外键约束,也不会干预使用触发器实现约束。 DO UPDATE中表达式列名是插入前列原始未更改

26200

进阶数据库系列(十):PostgreSQL 视图与触发器

这个选项被指定时,将检查该视图上 INSERTUPDATE 命令以确保新行满足视图定义条件(也就是,将检查新行来确保通过视图能看到它们)。如果新行不满足条件,更新将被拒绝。...如果没有指定 CHECK OPTION,会允许该视图上 INSERTUPDATE 命令创建通过该视图不可见行。支持下列检查选项: LOCAL:#只根据直接定义在该视图本身条件检查新行。...如果该视图或者任何基础关系具有导致 INSERTUPDATE 命令被重写 INSTEAD 规则,那么在被重写查询中将忽略所有检查选项,包括任何来自于定义在带有 INSTEAD 规则关系之上自动可更新视图检查...SET/DROP DEFAULT:#这些形式为一个设置或者移除默认。对于任何在该视图上 INSERT 或者 UPDATE 命令,一个视图列默认会在引用该视图任何规则或触发器之前被替换进来。...security_barrier (boolean):#更改该视图安全屏障属性。必须是一个布尔 true 或者 false。

58810

【PostgreSQL技巧】PostgreSQL物化视图与汇总表比较

多年来,物化视图一直是Postgres期待已久功能。他们最终到达了Postgres 9.3,尽管当时很有限。在Postgres 9.3,当刷新实例化视图时,它将在刷新时在表上保持锁定。...如果您工作量是非常繁忙工作时间,则可以工作,但是如果您要为最终用户提供动力,那么这将是一个大问题。在Postgres 9.4,我们看到了Postgres实现了同时刷新实例化视图功能。...upsert将尝试插入当天/页面的任何新记录,如果已经看到这些,则将增加它们: INSERT INTO rollups SELECT day, page, count(*) as views FROM...pageviews WHERE event_id > e GROUP BY day, page ON CONFLICT (day, page) DO UPDATE SET views = views...尽管您所见,汇总方法仅需要一点点努力,并且可以进一步扩展。

2.2K30

PostgreSQL数据存储基础知识

OID别名类型除了特定输入和输出例程之外没有别的操作。这些例程可以接受并显示系统对象符号名,而不是类型oid使用原始数字。别名类型使查找对象OID变得简单。...XID 事务ID: 由32位组成,这就有可能造成事务ID回卷问题,具体参考文档 顺序产生,依次递增 没有数据变更,INSERTUPDATE、DELETE等操作,在当前会话,事务ID不会改变 数据库系统中使用数据类型为...xmin 存储是产生这个元组事务ID,可能是insert或者update语句 xmax 存储是删除或者锁定这个元组XID 简单示例如下: select id, xmin, xmax from course...由于 OID 是系统表隐藏,因此查看系统表数据库对象OID时,必须在SELECT语句中显式指定。...pd_prune_xid:可删除 XID,如果没有则为零。

2.3K60

何在Ubuntu 18.04上安装和使用PostgreSQL

接下来两个命令设备分别创建type和color,其中每一个可以不为空。之后命令会创建一个location并创建一个约束,该约束要求该为八个可能之一。...例如,不要将列名包装在引号,但是您输入确实需要引号。 另外要记住是,您不要为equip_id输入。这是因为只要创建表新行,就会自动生成此项。...添加和删除表 创建表后,您可以修改它以相对容易地添加或删除。...及其中,但保留所有其他数据。...更新表数据 到目前为止,您已经学习了如何向表添加记录以及如何删除它们,但本教程尚未介绍如何修改现有条目。 您可以通过查询所需记录并将设置为您要使用来更新现有条目的

5.4K60

何在Ubuntu 16.04上安装和使用PostgreSQL

在本指南中,我们将演示如何在Ubuntu 16.04 VPS实例上安装Postgres,并介绍一些使用它基本方法。...然后,我们给出了设备type和color,其中每一个不能为空。我们创建一个location并创建一个约束,要求该为八个可能之一。最后一是日期,记录我们安装设备日期。...这是我们为equip_id提供serial类型表示。这将跟踪序列下一个数字,并自动为此类型创建。...首先,请记住不应引用列名,但是您输入确实需要引号。 要记住另一件事是我们不输入equip_id。这是因为只要创建表新行,就会自动生成此项。...您可以通过查询所需记录并将设置为您要使用来更新现有条目的。我们可以查询“swing”记录(这将匹配我们表每个 swing)并将其颜色更改为“red”。

5.1K10

PG从库查询被终止解决办法

根据报错信息,在主库上执行长时间查询过程,由于此查询涉及记录有可能在主库上被更新或删除,根据 PostgreSQLmvcc机制,更新或删除数据不是立即从物理块上删除,而是之后autovacuum...WAL发生冲突,此查询如果30秒没有执行完成则被中止,注意30秒不是备库上单个查询允许最大执行时间,是指当备库上应用WAL时允许最大WAL延迟应用时间,因此备库上查询执行时间有可能不到这个参数设置就被中止了...); insert into test_per2 (id) select * from generate_series(1,1000000) ; 编写pgbench压测脚本 update_per2.sql...T 120 -d postgres -Upostgres -n N -M prepared -f update_per2.sql 然后,到pgSlave备库去执行下查询操作: postgres=# select...都是有不太好地方: 1、 设置 max_standby_streaming_delay 参数为-1,这种方式有可能备库上慢查询由于长时间执行而消耗大量主机资源,建议根据应用情况设置一个较合理 2、

3.2K20

何在CentOS 7上安装和使用PostgreSQL

在本指南中,我们将演示如何在CentOS 7上安装Postgres并介绍一些使用它基本方法。...这是因为某些类型不需要设置长度,因为类型隐含了长度。 然后我们给出设备类型和颜色,每个都不能为空。然后,我们创建一个位置并创建一个约束,该约束要求该为八个可能之一。...这是我们为equip_id提供“序列”类型表示。这将跟踪序列下一个数字。...首先,请记住不应引用列名,但是您输入确实需要引号。 要记住另一件事是我们不输入equip_id。这是因为只要创建表新行,就会自动生成此项。...您可以通过查询所需记录并将设置为您要使用来更新现有条目的。我们可以查询“swing”记录(这将匹配我们表每个 swing)并将其颜色更改为“red”。

4.6K10
领券