update query example ejemplo duplicate sql postgresql upsert

sql - query - Inserción masiva, actualizar si está en conflicto(aumento de volumen) en Postgres



upsert on conflict (1)

Resulta que una tabla especial denominada excluded contiene la fila que se insertará (aunque el nombre es extraño)

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

Las cláusulas SET y WHERE en ON CONFLICT DO UPDATE tienen acceso a la fila existente utilizando el nombre de la tabla (o un alias), y a las filas propuestas para inserción utilizando la tabla especial excluida ...

Estoy escribiendo un programa de extracción de datos, que inserta de forma masiva los datos del usuario.

El SQL actual es solo una inserción masiva simple:

insert into USERS( id, username, profile_picture) select unnest(array[''12345'']), unnest(array[''Peter'']), unnest(array[''someURL'']), on conflict (id) do nothing;

¿Cómo hago una actualización en caso de conflicto? Lo intenté:

... unnest(array[''Peter'']) as a, unnest(array[''someURL'']) as b, on conflict (id) do update set username = a, profile_picture = b;

Pero se lanza. There is a column named "a" in table "*SELECT*", but it cannot be referenced from this part of the query. error.

EDITAR :

La tabla de USERS es muy sencilla:

create table USERS ( id text not null primary key, username text, profile_picture text );