Re: MERGE ... RETURNING
Vik Fearing <vik@postgresfriends.org>
From: Vik Fearing <vik@postgresfriends.org>
To: Jeff Davis <pgsql@j-davis.com>, Dean Rasheed <dean.a.rasheed@gmail.com>,
Gurjeet Singh <gurjeet@singh.im>
Cc: Isaac Morland <isaac.morland@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-10-31T23:19:04Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add RETURNING support to MERGE.
- c649fa24a42b 17.0 landed
-
doc: Improve a couple of places in the MERGE docs.
- 97d4262683ac 17.0 landed
- d4c573d8e81e 16.3 landed
- a875743ff402 15.7 landed
-
doc: improve description of privileges for MERGE and update glossary.
- 4bc8f29088f8 17.0 landed
- 3b6728910ace 16.2 landed
- ff772853d02e 15.6 landed
-
Fix RLS policy usage in MERGE.
- c2e08b04c9e7 17.0 cited
-
Fix leak of LLVM "fatal-on-oom" section counter.
- 4f4d73466d71 17.0 cited
-
Implement outer-level aggregates to conform to the SQL spec, with
- e649796f128b 7.4.1 cited
On 10/31/23 19:28, Jeff Davis wrote: > On Tue, 2023-10-31 at 12:45 +0100, Vik Fearing wrote: >> On 10/24/23 21:10, Jeff Davis wrote: >>> Can we revisit the idea of a per-WHEN RETURNING clause? >> >> For the record, I dislike this idea. > > I agree that it makes things awkward, and if it creates grammatical > problems as well, then it's not very appealing. > > There are only so many approaches though, so it would be helpful if you > could say which approach you prefer. This isn't as easy to answer for me as it seems because I care deeply about respecting the standard. The standard does not have RETURNING at all but instead has <data change delta table> and the results for that for a MERGE statement are clearly defined. On the other hand, we don't have that and we do have RETURNING so we should improve upon that if we can. One thing I don't like about either solution is that you cannot get at both the old row versions and the new row versions at the same time. I don't see how <data change delta table>s can be fixed to support that, but RETURNING certainly can be with some spelling of OLD/NEW or BEFORE/AFTER or whatever. > Assuming we have one RETURNING clause at the end, then it creates the > problem of how to communicate which WHEN clause a tuple came from, > whether it's the old or the new version, and/or which action was > performed on that tuple. > > How do we communicate any of those things? We need to get that > information into the result table somehow, so it should probably be > some kind of expression that can exist in the RETURNING clause. But > what kind of expression? > > (a) It could be a totally new expression kind with a new keyword (or > recycling some existing keywords for the same effect, or something that > looks superficially like a function call but isn't) that's only valid > in the RETURNING clause of a MERGE statement. If you use it in another > expression (say the targetlist of a SELECT statement), then you'd get a > failure at parse analysis time. This would be my choice, the same as how the standard GROUPING() "function" for grouping sets is implemented by GroupingFunc. -- Vik Fearing