UPSERT/RETURNING -> ON CONFLICT SELECT? - Mailing list pgsql-hackers

From Bjørnar Ness
Subject UPSERT/RETURNING -> ON CONFLICT SELECT?
Date
Msg-id CAJO99Tk8ZJ482RVGNn=147FmCZ=Tne2iOOJ18MU9bvEu5wXbZA@mail.gmail.com
Whole thread Raw
Responses Re: UPSERT/RETURNING -> ON CONFLICT SELECT?
List pgsql-hackers
The new upsert feature is a great addition, but in some cases is not
as usable as
I and seems lots of others would like it to be, take an example with
circular references:

create table foo ( id serial references bar(foo_id) on delete cascade, i int
);

create table bar ( foo_id integer references foo(id) on delete cascade, i int
);

A insert here would be:

with _foo as ( insert into foo(i) values(1) returning id
) insert into bar(foo_id,i) select id,2 from _foo;

But with upsert/do nothing, this will not work as "needed".

Would it be possible to introduce a "ON CONFLICT SELECT" argument:

with _foo as ( insert into foo(i) values(1) on conflict select returning id
) insert into bar(foo_id,i) select id,2 from _foo;

-- 
Bj(/)rnar



pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: Re: [COMMITTERS] pgsql: Avoid extra locks in GetSnapshotData if old_snapshot_threshold <
Next
From: Netanel Katzburg
Date:
Subject: Re: Disable WAL completely - Performance and Persistency research