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