Je voulais le faire aussi, après l'avoir examiné et un peu d'essais et d'erreurs, j'ai trouvé cette solution de travail.
utiliser le with
déclaration
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;
Essayez d'abord la mise à jour en renvoyant la ligne mise à jour, s'il n'y a pas de ligne renvoyée par la mise à jour, puis insérez la ligne en renvoyant la ligne insérée. Sélectionnez ensuite une union des valeurs renvoyées de la mise à jour et de l'insertion, puisqu'une seule se produira, vous n'obtiendrez qu'une seule ligne renvoyée.
J'espère que cela vous aidera