Re: INSERT ... ON CONFLICT {UPDATE | IGNORE}
От | Kevin Grittner |
---|---|
Тема | Re: INSERT ... ON CONFLICT {UPDATE | IGNORE} |
Дата | |
Msg-id | 1834320693.491047.1418917579166.JavaMail.yahoo@jws100174.mail.ne1.yahoo.com обсуждение исходный текст |
Ответ на | Re: INSERT ... ON CONFLICT {UPDATE | IGNORE} (Heikki Linnakangas <hlinnakangas@vmware.com>) |
Ответы |
Re: INSERT ... ON CONFLICT {UPDATE | IGNORE}
|
Список | pgsql-hackers |
Heikki Linnakangas <hlinnakangas@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+DtoppmTeLVmsOoqw@mail.gmail.com
В списке pgsql-hackers по дате отправления: