2011-09-08 73 views
1

可能重复:
Insert, on duplicate update (postgresql)
Cannot SELECT from UPDATE RETURNING clause in postgresPostgreSQL的UPSERT查询

帮助理解我的语法错误。我尽量让这样的实施UPSERT查询的 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查询?

+1

不,这不是重复 – potapuff

回答

2

你的问题被认为是重复的,因为PostgreSQL没有UPSERT命令的解决方案已经发布,它不会回答你如何实现UPSERT的问题。

在回答你的语法错误问题,你正在尝试做的是不可能的。你会发现,它的变化是可能的PostgreSQL中的9.1即将发布的版本,这将支持数据修改语句WITH子句: http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING

+0

“在回答你的语法错误你试图做的问题目前不可能。“好。但为什么?在文档中写为8.4“可选的RETURNING子句会导致UPDATE根据实际更新的每一行计算并返回值。可以计算任何使用表的列和/或FROM中提及的其他表的列的表达式。使用表的列的新(更新后)值。RETURNING列表的语法与SELECT的输出列表的语法相同。“但选择(更新...返回...)抛出语法错误 – potapuff

+0

问题是重复http://stackoverflow.com/questions/7191902/cannot-select-from-update-returning-clause-in-postgres – potapuff