Re: INSERT ON CONFLICT RETURNING

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: INSERT ON CONFLICT RETURNING
Date: 2017-10-26 07:56:55
Message-ID: 20171026075655.iajfg5xueumhm6jc@vdsl.uvw.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: 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(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-ru-general
--

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

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2017-10-26 07:58:35 Re: INSERT ON CONFLICT RETURNING
Previous Message Михаил 2017-10-26 05:49:18 Re: INSERT ON CONFLICT RETURNING