Bulk insert, update if on conflict (bulk upsert) on Postgres Bulk insert, update if on conflict (bulk upsert) on Postgres postgresql postgresql

Bulk insert, update if on conflict (bulk upsert) on Postgres


Turns out a special table named excluded contains the row-to-be-inserted(strange name though)

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

The SET and WHERE clauses in ON CONFLICT DO UPDATE have access to the existing row using the table's name (or an alias), and to rows proposed for insertion using the special excluded table...