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 20171026075655.iajfg5xueumhm6jc@vdsl.uvw.ru
Whole thread Raw
In response to [pgsql-ru-general] INSERT ON CONFLICT RETURNING  (Д.П. <aspamkiller@yandex.ru>)
Responses 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'ную запись или имеющуюся

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

pgsql-ru-general by date:

Previous
From: Михаил
Date:
Subject: Re: [pgsql-ru-general] INSERT ON CONFLICT RETURNING
Next
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: [pgsql-ru-general] INSERT ON CONFLICT RETURNING