Ik wilde dit ook al eens doen, na er naar te hebben gekeken en een beetje vallen en opstaan, kwam ik met deze werkende oplossing.
gebruik de with
verklaring
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;
Probeer de update eerst om de bijgewerkte rij te retourneren, als er geen rij is geretourneerd door de update, voeg dan de rij in die de ingevoegde rij retourneert. Selecteer vervolgens een unie van de geretourneerde waarden van de update en de invoeging, aangezien er slechts één zal gebeuren, krijgt u slechts één rij geretourneerd.
Ik hoop dat dit helpt