Postgresql upsert query
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Insert, on duplicate update (postgresql)
Cannot SELECT from UPDATE RETURNING clause in postgres
帮助理解语法错误。我试图在PosgreSql:
1 2 3 4 5 6 7 8 9 | 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 ); |
错误是:
1 2 3 4 5 6 7 8 9 | 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查询吗?
您的问题被建议为重复的,因为PostgreSQL的解决方案没有upsert命令已经发布,这确实回答了您关于如何实现upsert的问题。
在回答语法错误问题时,您目前不可能尝试这样做。您会发现,在即将到来的PostgreSQL 9.1版本中,可能会有一种变化,它将支持WITH子句中的数据修改语句:http://www.postgresql.org/docs/9.1/static/queries with.html queries-with-modifying