我正在编写一个数据挖掘程序,该程序会批量插入用户数据。
当前的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.
错误。
编辑:
表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子句可以使用表名(或别名)访问现有行,并使用特殊的排除表访问建议插入的行...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句