Обсуждение: Баг / улучшение в INSERT ON CONFILCT?

Поиск
Список
Период
Сортировка

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

От
Warstone@list.ru
Дата:

=> CREATE TABLE test (
  id BIGSERIAL NOT NULL PRIMARY KEY,
  name TEXT NOT NULL UNIQUE,
  value TEXT
);
CREATE TABLE

=> INSERT INTO test (name, value) VALUES ('test', '1');
INSERT 0 1

=> INSERT INTO test (name, value) VALUES ('test', '1');
ERROR:  duplicate key value violates unique constraint "test_name_key"
DETAIL:  Key (name)=(test) already exists.

=> INSERT INTO test (name, value) VALUES ('test', '1') ON CONFLICT DO NOTHING;
INSERT 0 0

=> INSERT INTO test (name, value) VALUES ('test', '1') ON CONFLICT DO NOTHING RETURNING id;
 id
----
(0 rows)

=> INSERT INTO test (name, value) VALUES ('test', '1') ON CONFLICT (name) DO UPDATE SET name = 'test' RETURNING id;
 id
----
  1
(1 row)

INSERT 0 1


=> SELECT version();
                                              version
---------------------------------------------------------------------------------------------------
 PostgreSQL 9.6.6 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
(1 row)



Куда писать чтобы и в случае DO NOTHING id возвращался?.. Так как кажется - баг.

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

От
"Dmitry E. Oboukhov"
Дата:
> С предложением по изменению поведения - сначала имеет смысл найти обсуждение
> этой фичи в pgsql-hackers и почитать, какие были доводы в пользу именно такого
> поведения (я тогда ещё не следил за списками рассылок, не знаю).

судя по дизайну - там просто никто не заморачивался RETURNING при
NOTHING, увы.
--

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756

Вложения