Postgresql upsert查询

时间:2011-09-08 06:54:44

标签: sql postgresql syntax-error upsert

  

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

帮助理解我的语法错误。我试着在up中实现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 个答案:

答案 0 :(得分:2)

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

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