Heikki Linnakangas <hlinnakan...@vmware.com> wrote: > INSERT INTO persons (username, real_name, data) > VALUES('foobar', 'foo bar') > ON CONFLICT (username), (real_name) IGNORE;
> INSERT INTO persons (username, real_name, data) > VALUES('foobar', 'foo bar') > ON CONFLICT (username) IGNORE > ON CONFLICT (real_name) UPDATE ...; > INSERT INTO persons (username, real_name, data) > VALUES('foobar', 'foo bar') > ON CONFLICT (username, real_name) IGNORE > ON CONFLICT (real_name) UPDATE username = excluded.username; > ON CONFLICT (username) UPDATE real_name = excluded.real_name; I like all of these suggestions, except that I think they reflect a couple things about the syntax which was never settled[1]. First, Robert suggested using DUPLICATE instead of CONFLICT, which I think it clearer. So the above would become: INSERT INTO persons (username, real_name, data) VALUES('foobar', 'foo bar') ON DUPLICATE (username), (real_name) IGNORE; INSERT INTO persons (username, real_name, data) VALUES('foobar', 'foo bar') ON DUPLICATE (username) IGNORE ON DUPLICATE (real_name) UPDATE ...; INSERT INTO persons (username, real_name, data) VALUES('foobar', 'foo bar') ON DUPLICATE (username, real_name) IGNORE ON DUPLICATE (real_name) UPDATE username = excluded.username; ON DUPLICATE (username) UPDATE real_name = excluded.real_name; Second, he suggested a shorthand way of specifying that all the values from the failed INSERT should be used for the UPDATE: INSERT INTO persons (username, real_name, data) VALUES('foobar', 'foo bar', 'baz') ON DUPLICATE (username) UPDATE; I think the first point got lost in the discussion of the second one. I don't think either point was ever really settled beyond Robert and I preferring ON DUPLICATE versus Peter preferring ON CONFLICT. -- Kevin Grittner EDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company [1] http://www.postgresql.org/message-id/CA+TgmoZN=2ajki1n4jz5bkmyi8r_cpudw+dtoppmtelvmso...@mail.gmail.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers