Re: Баг / улучшение в INSERT ON CONFILCT?

From: Sergei Kornilov <sk(at)zsrv(dot)org>
To: "Warstone(at)list(dot)ru" <warstone(at)list(dot)ru>, "pgsql-ru-general(at)lists(dot)postgresql(dot)org" <pgsql-ru-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Баг / улучшение в INSERT ON CONFILCT?
Date: 2018-08-15 15:13:25
Message-ID: 10884691534346005@iva1-4ad1e49a78b2.qloud-c.yandex.net
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

<div>Привет</div><div>Это задокументированное поведение, поэтому точно не баг: https://www.postgresql.org/docs/9.6/static/sql-insert.html</div><div>&gt; Only rows that were successfully inserted or updated will be returned.</div><div> </div><div>С предложением по изменению поведения - сначала имеет смысл найти обсуждение этой фичи в pgsql-hackers и почитать, какие были доводы в пользу именно такого поведения (я тогда ещё не следил за списками рассылок, не знаю).</div><div> </div><div>Сергей</div><div><br /></div><div><br /></div><div>15.08.2018, 17:50, "Warstone(at)list(dot)ru" &lt;warstone(at)list(dot)ru&gt;:</div><blockquote type="cite">
<p>=&gt; CREATE TABLE test (<br />  id BIGSERIAL NOT NULL PRIMARY KEY,<br />  name TEXT NOT NULL UNIQUE,<br />  value TEXT<br />);<br />CREATE TABLE<br /><br />=&gt; INSERT INTO test (name, value) VALUES ('test', '1');<br />INSERT 0 1<br /><br />=&gt; INSERT INTO test (name, value) VALUES ('test', '1');<br />ERROR:  duplicate key value violates unique constraint "test_name_key"<br />DETAIL:  Key (name)=(test) already exists.<br /><br />=&gt; INSERT INTO test (name, value) VALUES ('test', '1') ON CONFLICT DO NOTHING;<br />INSERT 0 0<br /><br />=&gt; INSERT INTO test (name, value) VALUES ('test', '1') ON CONFLICT DO NOTHING RETURNING id;<br /> id<br />----<br />(0 rows)<br /><br />=&gt; INSERT INTO test (name, value) VALUES ('test', '1') ON CONFLICT (name) DO UPDATE SET name = 'test' RETURNING id;<br /> id<br />----<br />  1<br />(1 row)<br /><br />INSERT 0 1</p><p><br data-mce-bogus="1" /></p><p>=&gt; SELECT version();<br />                                              version<br />---------------------------------------------------------------------------------------------------<br /> PostgreSQL 9.6.6 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.<span>0 20170516</span>, 64-bit<br />(1 row)<br /><br /><br /><br />Куда писать чтобы и в случае DO NOTHING id возвращался?.. Так как кажется - баг.<br /></p>
</blockquote>

Attachment Content-Type Size
unknown_filename text/html 2.3 KB

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2018-10-01 10:28:16 Re: Баг / улучшение в INSERT ON CONFILCT?
Previous Message 2018-08-15 14:50:08 Баг / улучшение в INSERT ON CONFILCT?