Re: [pgsql-ru-general] INSERT ON CONFLICT RETURNING - Mailing list pgsql-ru-general

From Dmitry E. Oboukhov
Subject Re: [pgsql-ru-general] INSERT ON CONFLICT RETURNING
Date
Msg-id 20171026075835.g7cmhtnos34ycno5@vdsl.uvw.ru
Whole thread Raw
In response to Re: [pgsql-ru-general] INSERT ON CONFLICT RETURNING  ("Dmitry E. Oboukhov" <unera@debian.org>)
List pgsql-ru-general
> WITH "r" AS (
> INSERT INTO ...
> ON CONFLICT ... DO NOTHING

> RETURNING *
> )
> SELECT
> *
> FROM
> ...
> WHERE
> id = $id
> AND NOT EXISTS (SELECT * FROM "r")

> UNION

> SELECT
> *
> FROM
> "r"
> ;

> как-то так

> вернет вставленную/uptate'ную запись или имеющуюся

а ну еще LIMIT 1 вкрутить, если лишний хвост в выдаче не нужен

> On 17:43 Sat 14 Oct     , Д.П. wrote:
>> И снова здравствуйте.

>> Как бы мне извернуться, и узнать какое-нибудь поле из конфликтной записи,
>> которого не было во вставке?
>> То есть, грубо говоря
>> я вставляю новую запись в таблицу
>> # \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 вернётся, но планируется неплохая нагрузка на эту таблицу и
>> не хочется добавлять.

>> //ДП

>> --
>> Sent via pgsql-ru-general mailing list (pgsql-ru-general@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-ru-general
> --

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

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

pgsql-ru-general by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: [pgsql-ru-general] INSERT ON CONFLICT RETURNING
Next
From: Nikolay Samokhvalov
Date:
Subject: [pgsql-ru-general] Re: [pgsql-ru-general] Запарил сверхинтеллект