1

重複の可能性:
挿入、重複更新時(postgresql)
postgresのUPDATERETURNING句から選択できません

構文エラーを理解するのに役立ちます。私は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 に答える