> 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