Saya juga ingin melakukan ini, setelah melihat ke dalamnya dan sedikit coba-coba, saya menemukan solusi yang berfungsi ini.
gunakan with
pernyataan
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;
Coba pembaruan terlebih dahulu mengembalikan baris yang diperbarui, jika tidak ada baris yang dikembalikan dari pembaruan, lalu masukkan baris yang mengembalikan baris yang disisipkan. Kemudian pilih gabungan dari nilai yang dikembalikan dari pembaruan dan penyisipan, karena hanya satu yang akan terjadi, Anda hanya akan mendapatkan satu baris yang dikembalikan.
Semoga membantu