Jeg har også ønsket at gøre dette, efter at have undersøgt det og prøvet og fejlet lidt, fandt jeg frem til denne fungerende løsning.
brug with
erklæring
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;
Prøv først opdateringen med at returnere rækken opdateret, hvis der ikke er nogen række returneret fra opdateringen, indsæt derefter rækken, der returnerer den indsatte række. Vælg derefter en forening af de returnerede værdier fra opdateringen og indsættelsen, da kun én vil ske, vil du kun få en række returneret.
Håber dette hjælper