Postgresql upsert 查询

6 浏览
0 Comments

Postgresql upsert 查询

此问题已经有答案了:

可能的重复:

Insert, on duplicate update (postgresql)

Cannot SELECT from UPDATE RETURNING clause in postgres

帮帮我理解语法错误。我试图在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

但是没有插入部分的更新子查询工作正常。

是否有更简单的方法来进行upsert查询?

admin 更改状态以发布 2023年5月22日
0
0 Comments

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

关于你的语法错误问题,你试图做的当前是不可能的。你将会发现,在即将推出的PostgreSQL 9.1版本中,它支持在WITH子句中修改数据语句的一种变体:
http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING

0