Re: support for MERGE

Alvaro Herrera <alvherre@alvh.no-ip.org>

From: Álvaro Herrera <alvherre@alvh.no-ip.org>
To: "Justin Pryzby" <pryzby@telsasoft.com>
Cc: "Peter Eisentraut" <peter.eisentraut@enterprisedb.com>, "Amit Langote" <amitlangote09@gmail.com>, "Japin Li" <japinli@hotmail.com>, "Zhihong Yu" <zyu@yugabyte.com>, "Simon Riggs" <simon.riggs@enterprisedb.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, "Tomas Vondra" <tomas.vondra@enterprisedb.com>, "Daniel Westermann" <dwe@dbi-services.com>, "Erik Rijkers" <er@xs4all.nl>, "Jaime Casanova" <jcasanov@systemguards.com.ec>, "Andres Freund" <andres@anarazel.de>
Date: 2022-06-14T09:27:06Z
Lists: pgsql-hackers

Attachments

On Wed, Jun 1, 2022, at 5:28 PM, Alvaro Herrera wrote:
> Re-reading the modified paragraph, I propose "see X for a thorough
> explanation on the behavior of MERGE under concurrency".  However, in
> the proposed patch the link goes to Chapter 13 "Concurrency Control",
> and the explanation that we intend to link to is hidden in subsection
> 13.2.1 "Read Committed Isolation level".  So it appears that we do not
> have any explanation on how MERGE behaves in other isolation levels.
> That can't be good ...

OK, here's slightly updated wording for this, after reading the MVCC docs again. I didn't change the link to point specifically to read-committed, but I worded the reference to suggest that the referenced explanation is within each isolation level's subsection. In reality, there's not much to say about each specific command in REPEATABLE READ and SERIALIZABLE, but in the former I added MERGE to the list of commands.

I checked the pages for UPDATE and DELETE, to see if they had any explanation of concurrency, to use that as precedent. I couldn't find anything.

Commits

  1. Doc fixes for MERGE statement

  2. MERGE docs adjustments

  3. Link to MVCC docs in MERGE docs

  4. Fix EXPLAIN MERGE output when no tuples are processed

  5. Make EXPLAIN MERGE output format more compact

  6. Add support for MERGE SQL command

  7. Split ExecUpdate and ExecDelete into reusable pieces

  8. Add API of sorts for transition table handling in trigger.c

  9. Represent Lists as expansible arrays, not chains of cons-cells.