【问题标题】:Postgresql upsert query [duplicate]Postgresql upsert查询[重复]
【发布时间】:2011-11-12 17:46:31
【问题描述】:

可能重复:
Insert, on duplicate update (postgresql)
Cannot SELECT from UPDATE RETURNING clause in postgres

帮助了解我的语法错误。我尝试在 PosgreSql:

create table tbl( key  int, val int);

insert into tbl(key,val)
   select distinct(key), 0 from unnest('{0,1,2,3,4,5}'::int[]) as key
       where key not in (
         update tbl set val = 1
             where key = any('{0,1,2,3,4,5}'::int[])
         returning key
);

错误是:

ERROR:  syntax error at or near "tbl"
ROWS 6:  update tbl set val = 1
                  ^

********** Error **********

ERROR: syntax error at or near "tbl"
SQL state: 42601
Character: 167

但是没有插入部分的更新子查询效果很好。

有没有最简单的方法来进行 upsert 查询?

【问题讨论】:

  • 不,它不是重复的

标签: sql postgresql syntax-error upsert


【解决方案1】:

您的问题被建议为重复,因为已经发布了针对 PostgreSQL 没有 UPSERT 命令的解决方案,它确实回答了您关于如何实施 UPSERT 的问题。

目前无法回答您尝试执行的语法错误问题。您会发现在即将发布的 PostgreSQL 9.1 版本中可能会有一个变体,它将支持 WITH 子句中的数据修改语句: http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING

【讨论】:

  • “目前无法回答您的语法错误问题。”好的。但为什么?在 8.4 的文档中写道“可选的 RETURNING 子句导致 UPDATE 根据实际更新的每一行计算和返回值。可以计算使用表的列和/或 FROM 中提到的其他表的列的任何表达式。使用表列的新(更新后)值。返回列表的语法与 SELECT 的输出列表的语法相同。但是 SELECT (UPDATE ... RETURNING ...) 抛出语法错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2021-09-22
相关资源
最近更新 更多