Ich wollte dies auch tun, nachdem ich mich damit befasst und ein wenig versucht und geirrt hatte, kam ich zu dieser funktionierenden Lösung.
Verwenden Sie den with
Erklärung
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;
Versuchen Sie, die Aktualisierung zuerst mit der aktualisierten Zeile zurückzugeben. Wenn von der Aktualisierung keine Zeile zurückgegeben wird, fügen Sie dann die Zeile ein, die die eingefügte Zeile zurückgibt. Wählen Sie dann eine Vereinigung der zurückgegebenen Werte aus der Aktualisierung und der Einfügung aus, da nur einer auftritt, erhalten Sie nur eine zurückgegebene Zeile.
Hoffe das hilft