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

如何在PostgreSQL中引用` `insert select on conflict update`语句中的选定行

在PostgreSQL中,可以使用INSERT INTO ... SELECT ... ON CONFLICT DO UPDATE语句来引用insert select on conflict update语句中的选定行。

INSERT INTO ... SELECT ...语句用于将查询结果插入到目标表中。例如,假设有一个名为source_table的表,我们想要将其中的某些行插入到另一个名为target_table的表中。可以使用以下语法:

代码语言:txt
复制
INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition;

在这个语句中,target_table是目标表,source_table是源表,column1, column2, ...是要插入的目标表的列,condition是一个可选的条件,用于筛选要插入的源表行。

ON CONFLICT DO UPDATE子句用于在插入冲突时执行更新操作。它允许我们指定在目标表中存在冲突时要执行的更新操作。例如,如果目标表中已经存在与要插入的行具有相同唯一约束或主键的行,我们可以选择更新冲突行的某些列。以下是使用ON CONFLICT DO UPDATE子句的语法:

代码语言:txt
复制
INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM source_table
WHERE condition
ON CONFLICT (conflict_column)
DO UPDATE SET column1 = EXCLUDED.column1, column2 = EXCLUDED.column2, ...;

在这个语句中,conflict_column是目标表中的冲突列,EXCLUDED是一个特殊的关键字,表示要插入的行。SET column1 = EXCLUDED.column1, column2 = EXCLUDED.column2, ...用于指定要更新的列及其对应的值。

这种语句的应用场景包括以下情况:

  • 在数据迁移过程中,将源表中的特定行插入到目标表中,并在冲突时更新目标表的对应行。
  • 在数据同步过程中,将源表中的变化数据插入到目标表中,并在冲突时更新目标表的对应行。
  • 在批量导入数据时,避免插入重复数据,而是更新已存在的数据。

腾讯云提供的与PostgreSQL相关的产品是TDSQL(TencentDB for PostgreSQL),它是一种高度兼容的云数据库,提供了高性能、高可用性和可扩展性。您可以通过以下链接了解更多关于TDSQL的信息:TDSQL产品介绍

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

相关·内容

微信为什么使用 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

微信为什么使用 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:据我所知,也许可以通过可更新视图或派生列来模拟该功能。

    9310

    微信为什么使用 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 保存聊天记录?

    开发者可以使用空值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

    SqlAlchemy 2.0 中文文档(十七)

    ORM 映射实体到 Insert.returning() 方法,然后将以 ORM 结果从构造物 Select 中提供方式传递,包括映射实体将以 ORM 映射对象形式在结果中提供。...在 SQLAlchemy 选定后端可能包括特定方言Insert 构造,这些构造还具有执行“upserts”或将参数集中现有转换为近似 UPDATE 语句能力。...映射实体传递给 Insert.returning() 方法,然后以从构造物 Select 传递 ORM 结果方式传递,包括映射实体将作为 ORM 映射对象在结果传递。...SQLAlchemy 选定后端可能包括特定于方言Insert构造,这些构造还具有执行“upserts”或将参数集中现有转换为近似 UPDATE 语句能力。...PostgreSQL - 使用Insert,在 INSERT…ON CONFLICT (Upsert)有详细说明。

    29910

    Postgresql(一) 致不了解那些事

    limit关键在在select句中是可行,但是当我们指定要更新或者是删除指定条数数据时候却发现在Pgupdate/delete根本就没有这个limit使用。...(select * from t1); 这里t1其实就是临时表,是括号里面select产生select句中可以使用limit,所有临时表t1其实就是我们要update数据,update 时候直接指定我们更新数据在临时表中就...POSIX正则表达式就是我们一般在脚本语言中使用标准正则表达式,而SQL正则表达式首先是遵循SQL语句中like语法, 字符“.”在POSIX正则表达式中代表任意字符,而在SQL表达式中就只能表示自己...UPSERT是INSERT, ON CONFLICT UPDATE简写,简而言之就是:插入数据,正常时写入,主键冲突时更新。...or insert into t values('qqlive','rudy4') ON CONFLICT (website) do update set name=EXCLUDED.name values

    1.8K30

    SqlAlchemy 2.0 中文文档(七十五)

    这个Insert子类添加了两个新方法Insert.on_conflict_do_update()和Insert.on_conflict_do_nothing(),它们实现了 PostgreSQL 9.5...INSERT…ON CONFLICT(Upsert) #3529 ### ARRAY 和 JSON 类型现在正确指定为“不可哈希” 关于“不可哈希”类型更改,影响 ORM 去重所述,当查询选定实体混合了完整...这个 Insert 子类添加了两个新方法 Insert.on_conflict_do_update() 和 Insert.on_conflict_do_nothing(),实现了 PostgreSQL...INSERT…ON CONFLICT (Upsert) #3529 ### ARRAY 和 JSON 类型现在正确指定为“不可哈希” 关于“不可哈希”类型更改,影响 ORM 去重 描述,...INSERT…ON CONFLICT (Upsert) #3529 ARRAY 和 JSON 类型现在正确指定“不可哈希” 关于“不可哈希”类型变更,影响了 ORM 去重所述,ORM 在查询选定实体混合全

    26910

    Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析

    1 语法介绍 insert on conflict语法实现了upsert功能,即在插入发生主键冲突、或唯一约束冲突时,执行on conflict后面的语句,将insert变成update或do nothing...(x,y) values(101,20) on conflict (x) do update set y=EXCLUDED.y; INSERT 0 1 postgres=# postgres=# select...,EXCLUDED表示准备要新插入这一数据。...) 2 内核执行流程 注意:后面提到speculative insert等价与insert on conflict语法。...但由于无锁检查,可能在真正insert时又发生了唯一键冲突(前面检查完了,其他并发insert一条冲突数据) 那么这时xlog已经有一条成功insert了,需要再后面加一条delete(图中第四步冲突发生了

    1.3K20

    SqlAlchemy 2.0 中文文档(三十六)

    include_defaults – 如果为 True,则将在 INSERTSELECT句中呈现在 Column 对象上指定非服务器默认值和 SQL 表达式( Column INSERT...attribute select: Select[Any] | None = None 用于 INSERT … FROM SELECT SELECT ��� class sqlalchemy.sql.expression.Update...include_defaults – 如果为 True,则将渲染到 INSERTSELECT句中非服务器默认值和在 Column 对象上指定 SQL 表达式( Column INSERT...还提供了使用特殊 .column 属性列表达式,该属性可用于在列或 where 子句中引用函数输出,例如 PostgreSQL 等后端标量值。...还提供了一个列表达式,使用特殊 .column 属性,该属性可用于在列或 WHERE 子句中引用函数输出,例如 PostgreSQL 这样后端标量值。

    25710

    PostgreSQL基础知识整理

    INSERT INTO语法如下: INSERT INTO table VALUES (value1,value2,value3,...valueN); UPDATE UPDATE被用来修改现有的表记录...可以使用UPDATE查询WHERE子句更新选定,否则会被更新所有。...可以使用子查询SELECTINSERTUPDATE和DELETE语句,与运算符=,,>=,<=,IN等一起使用。有几个子查询必须遵循规则: 必须用括号括起来子查询。...子查询只能有一个在SELECT句中列,除非多列在主查询查询来比较其选定列。 ORDER BY不能使用在子查询,虽然主查询就可以使用ORDER BY。...GROUP BY可以用来执行相同功能在子查询ORDER BY。 子查询返回多于一只能用于使用多值运算符,为IN,EXISTS,IN,ANY / SOME,ALL运算符。

    3.5K10

    从零开始学PostgreSQL (十四):高级功能

    WITH CHECK OPTION: 当创建视图时,可以使用WITH CHECK OPTION子句来限制对视图INSERTUPDATE操作,使其必须满足视图定义WHERE子句条件。...INSERT/UPDATE/DELETE操作: 对于可更新视图,你可以执行INSERTUPDATE和DELETE操作,就像对基础表一样。...使用场景: 比较当前行与同组内其他值,计算每个部门员工薪水排名。 执行累计计算,计算销售额累计总和。 计算移动平均数、百分位数等统计指标。...窗口函数在非窗口聚合函数之后执行,意味着可以在窗口函数参数中使用非窗口聚合函数。 高级用法: 可以在WINDOW子句中命名窗口框架,然后在多个OVER子句中引用,避免重复定义相同窗口行为。...相反,可以为每个窗口行为在WINDOW子句中命名,然后在OVER引用

    6010

    SqlAlchemy 2.0 中文文档(五十八)

    这允许访问计数,例如 INSERTSELECT 语句,至少在使用 DBAPI 支持程度上。...示例包括嵌入在诸如 union() 复合语句中 select(),在 Insert.from_select() 构造,以及在不是 ORM 相关顶级 CTE 表达式。...此更改还 反向移植 至:1.4.45 引用:#8952 postgresql [postgresql] [bug] 修复了一个 PostgreSQL bug,其中 Insert.on_conflict_do_update.constraint...参考:#10662 sql [sql] [bug] 修复了 SQL 元素字符串化问题,其中未传递特定方言时,遇到特定方言元素( PostgreSQL “on conflict do update...参考:#10414 SQL [SQL] [错误] 修复了在 UPDATE 语句 SET 子句中引用 FROM 条目不会将其包括在 UPDATE 语句 FROM 子句中问题,如果该条目在语句中没有其他地方出现

    8610
    领券