मैं इसे भी करना चाहता था, इसे देखने के बाद और थोड़ा परीक्षण और त्रुटि के बाद मैं इस कामकाजी समाधान के साथ आया।
with
का उपयोग करें बयान
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;
अद्यतन की गई पंक्ति को वापस करने से पहले अद्यतन का प्रयास करें, यदि अद्यतन से कोई पंक्ति नहीं लौटाई गई है, तो सम्मिलित पंक्ति को वापस करने वाली पंक्ति डालें। फिर लौटाए गए मानों के एक संघ का चयन करें अद्यतन और सम्मिलित करें, क्योंकि केवल एक ही होगा, आपको केवल एक पंक्ति वापस मिल जाएगी।
आशा है कि यह मदद करता है