sql upsert 语句 - postgresql

Posted

技术标签:

【中文标题】sql upsert 语句 - postgresql【英文标题】:sql upsert statement- postgresql 【发布时间】:2021-08-03 13:32:06 【问题描述】:

表格

id | name | value
0  | apis | apple

我想将 ,orange 附加到这个值上,值应该类似于 apple,orange

我正在尝试执行此查询,但是假设原始值为 apple,因此我希望最终值为 apple,orange 但我得到的是 orange,orange。似乎 EXCLUDED.value 是从 INSERT STATEMENT 读取的,我如何获得由逗号和橙色 (apple,orange)

附加的原始值
INSERT INTO my_table(id, name, value)
       VALUES(0, 'apis', 'dummyapi')
ON CONFLICT (id,name)
DO UPDATE set value = EXCLUDED.value || ',dummyapi'
    where my_table.name = 'apis'
      AND my_table.id=0
      AND my_table.value not ilike '%dummyapi%';

【问题讨论】:

【参考方案1】:

在您的查询中,您将 EXCLUDED 变量与字符串连接,因此覆盖了 value 的内容,请查看:

INSERT INTO my_table(id, name, value) VALUES(0, 'apis', 'orange')
ON CONFLICT (id,name)
DO UPDATE set value = my_table.value || ',' || EXCLUDED.VALUE;

演示:db<>fiddle

【讨论】:

以上是关于sql upsert 语句 - postgresql的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中Upsert的三种方式

SQL Server 1B+ 记录表 - 处理 upserts 的最佳方式?

一次Impala upsert kudu执行缓慢问题排查总结

使用 jOOQ 在 PostgreSQL 中进行 UPSERT

Amazon Redshift 中的动态合并语句 (upsert)

将 Oracle upsert 转换为 PostgreSQL 准备好的语句