Re: Should use MERGE use BulkInsertState ?
Alvaro Herrera <alvherre@alvh.no-ip.org>
From: Alvaro 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, 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-05-11T15:23:27Z
Lists: pgsql-hackers
On 2022-May-11, Justin Pryzby wrote: > Should it use it ? > > It occured to me to ask when reading Bruce's release notes, which say: > | [MERGE] is similar to INSERT ... ON CONFLICT but more batch-oriented. > > Currently, INSERT *never* uses bistate - even INSERT SELECT. > > INSERTing 10k tuples will dirty 10k buffers - not limited to the size of a > strategy/ring buffer. Currently, MERGE will do the same. As I understand it, the point of using a ring is to throttle performance for bulk operations such as vacuum. I'm not sure why we would want to throttle either MERGE or INSERT; it seems to me that we should want them to go as fast as possible. If MERGE were to use a ring buffer, why wouldn't UPDATE do the same? There are some comments to that effect in src/backend/buffer/README -- they do mention UPDATE/DELETE and not INSERT. It seems to me that these three commands (MERGE/UPDATE/DELETE) should be handled in similar ways, so I don't think we need to consider lack of MERGE using a ring buffer an open item for pg15. COPY uses a ring buffer too. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
Commits
-
Doc fixes for MERGE statement
- 5dcebd10baa8 16.0 landed
- 5bb88967ed5c 15.0 landed
-
MERGE docs adjustments
- d6d1fbf353d1 15.0 landed
- 3d895bc846f2 16.0 landed
-
Link to MVCC docs in MERGE docs
- ffffeebf2447 15.0 landed
-
Fix EXPLAIN MERGE output when no tuples are processed
- 12e423e21d8e 15.0 landed
-
Make EXPLAIN MERGE output format more compact
- 598ac10be1c2 15.0 landed
-
Add support for MERGE SQL command
- 7103ebb7aae8 15.0 landed
-
Split ExecUpdate and ExecDelete into reusable pieces
- 25e777cf8e54 15.0 landed
-
Add API of sorts for transition table handling in trigger.c
- 3a46a45f6f00 15.0 landed
-
Represent Lists as expansible arrays, not chains of cons-cells.
- 1cff1b95ab6d 13.0 cited