Chciałem to zrobić, po zapoznaniu się z tym i małych próbach i błędach wymyśliłem to działające rozwiązanie.
użyj with
oświadczenie
with
u as (
update my_table
set some_value = $2
where
id = $1
returning *
)
,
i as (
insert into my_table (id, some_value)
select $1, $2
where
not exists(select * from u)
returning *
)
select * from u
union
select * from i;
Spróbuj zaktualizować najpierw zwracając zaktualizowany wiersz, jeśli nie ma wiersza zwróconego z aktualizacji, a następnie wstaw wiersz zwracający wstawiony wiersz. Następnie wybierz sumę zwróconych wartości z aktualizacji i wstawienia, ponieważ zdarzy się tylko jeden, otrzymasz zwrócony tylko jeden wiersz.
Mam nadzieję, że to pomoże