1

可能重复:
插入,重复更新(postgresql)
无法从 postgres 中的 UPDATE RETURNING 子句中选择

帮助理解我的语法错误。我尝试在 PosgreSql 中实现 upsert 查询:

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

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

有没有最简单的方法来进行更新插入查询?

4

1 回答 1

2

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

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

于 2011-09-09T14:39:33.223 回答