запрос типа «ВСТАВИТЬ В КОНФЛИКТ» НИЧЕГО НЕ ВОЗВРАЩАЕТСЯ »ничего не возвращает - PullRequest
1 голос
/ 01 мая 2019

Оператор return возвращает 0 строк, но я хочу строку, которая не может быть вставлена ​​из-за конфликта.Что-то мне там не хватает?

подробно: таблица users_strategies получила первичные ключи (id_strategy, id_account)

xsignalsbot=# select * from users_strategies;
 id | id_strategy | id_account | risk | active
----+-------------+------------+------+--------
  1 |           1 |         48 | 0.50 | t
  2 |           2 |         48 | 0.25 | f
(2 rows)

xsignalsbot=# insert into users_strategies (id_strategy,id_account) 
                 values (1,48) on conflict (id_strategy,id_account) do nothing
                    returning active,risk;
 active | risk
--------+------
(0 rows)

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Изменение оператора DO NOTHING на оператор UPDATE SET (без изменения конечного результата) дает требуемые результаты:

xsignalsbot=# insert into users_strategies (id_strategy,id_account) 
                 values (1,48) on conflict (id_strategy,id_account) do update set
                   id_strategy=excluded.id_strategy returning users_strategies.active, users_strategies.risk;

 active | risk
--------+------
 t      | 0.50
(1 row)
1 голос
/ 01 мая 2019

DO NOTHING не относится к RETURNING:

Необязательное предложение RETURNING заставляет INSERT вычислять и возвращать значения, основанные на каждой фактически вставленной строке (или обновленной, если использовалось предложение ON CONFLICT DO UPDATE).

ссылка

...