INSERT ON CONFLICT RETURNING

From: Д(dot)П(dot) <aspamkiller(at)yandex(dot)ru>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: INSERT ON CONFLICT RETURNING
Date: 2017-10-14 14:43:24
Message-ID: 6d849576-34ea-797b-73ea-18a1a939e1d3@yandex.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

И снова здравствуйте.

Как бы мне извернуться, и узнать какое-нибудь поле из конфликтной
записи, которого не было во вставке?
То есть, грубо говоря
я вставляю новую запись в таблицу
# \d requests
                                      Таблица "public.requests"
    Столбец    |             Тип |                     Модификаторы
---------------+-----------------------------+-------------------------------------------------------
 id            | bigint                      | NOT NULL DEFAULT
nextval('requests_id_seq'::regclass)
 middleware_id | character varying(1024)     |

Индексы:
    "requests_pkey" PRIMARY KEY, btree (id)
    "requests_middleware_id_index" UNIQUE, btree (middleware_id)

И вот такой командой оно мне, в случае конфликта middleware_id
возвращает ровно ничего.

> insert into requests ( middleware_id ) values (1) on conflict do
nothing returning id;

 id
----
(0 строк)

INSERT 0 0

А я хочу id записи, или все поля записи.

Или это невозможно и надо проверять результат и потом SELECT?

В общем если добавить какое-то поле типа access_counter и ON CONFLICT DO
UPDATE SET access_counter = access_counter + 1
то, конечно, id вернётся, но планируется неплохая нагрузка на эту
таблицу и не хочется добавлять.

//ДП

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Михаил 2017-10-26 05:49:18 Re: INSERT ON CONFLICT RETURNING
Previous Message Dmitry E. Oboukhov 2017-09-28 08:54:35 Re: SPAM (6.4) [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Темпоральные данные в PostgreSQL