Chtěl jsem to udělat také, po prozkoumání a troše pokusů a omylů jsem přišel s tímto funkčním řešením.
použijte with
prohlášení
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;
Zkuste aktualizaci nejprve vrátit aktualizovaný řádek, pokud z aktualizace není vrácen žádný řádek, vložte řádek vracející vložený řádek. Poté vyberte spojení vrácených hodnot z aktualizace a vložení, protože se stane pouze jedna, vrátíte pouze jeden řádek.
Doufám, že to pomůže