И аз исках да направя това, след като го разгледах и направих малко опити и грешки, стигнах до това работещо решение.
използвайте with
изявление
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;
Опитайте актуализацията, като първо върнете актуализирания ред, ако няма върнат ред от актуализацията, след това вмъкнете реда, който връща вмъкнатия ред. След това изберете обединение на върнатите стойности от актуализацията и вмъкването, тъй като ще се случи само една, ще получите само един върнат ред.
Надявам се това да помогне