ユーザーデータを一括挿入するデータマイニングプログラムを作成しています。
現在のSQLは単純な一括挿入です。
insert into USERS(
id, username, profile_picture)
select unnest(array['12345']),
unnest(array['Peter']),
unnest(array['someURL']),
on conflict (id) do nothing;
競合が発生した場合、どのように更新しますか?私は試した:
...
unnest(array['Peter']) as a,
unnest(array['someURL']) as b,
on conflict (id) do
update set
username = a,
profile_picture = b;
ただし、There is a column named "a" in table "*SELECT*", but it cannot be referenced from this part of the query.
エラー。
[〜#〜] edit [〜#〜]:
USERS
の表は非常に単純です:
create table USERS (
id text not null primary key,
username text,
profile_picture text
);
excluded
という名前の特別なテーブルには、挿入する行が含まれています(ただし、奇妙な名前です)
insert into USERS(
id, username, profile_picture)
select unnest(array['12345']),
unnest(array['Peter']),
unnest(array['someURL'])
on conflict (id) do
update set
username = excluded.username,
profile_picture = excluded.profile_picture;
http://www.postgresql.org/docs/9.5/static/sql-insert.html#SQL-ON-CONFLICT
ON CONFLICT DO UPDATEのSET句とWHERE句は、テーブルの名前(またはエイリアス)を使用して既存の行にアクセスし、特別な除外テーブルを使用して挿入が提案された行にアクセスします...