Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM
Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
From: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
To: Jeff Davis <pgsql@j-davis.com>
Cc: Masahiko Sawada <sawada.mshk@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>,
Andres Freund <andres@anarazel.de>, Dilip Kumar <dilipbalaut@gmail.com>, Luc Vlaming <luc@swarm64.com>, Justin Pryzby <pryzby@telsasoft.com>, Michael Paquier <michael@paquier.xyz>, Matthias van de Meent <boekewurm+postgres@gmail.com>,
Alexander Korotkov <aekorotkov@gmail.com>
Date: 2024-08-29T07:25:59Z
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 →
-
libpq: Fix some issues in TAP tests for service files
- 2c7bd2ba507e 18.0 cited
-
Multiple revisions to the GROUP BY reordering tests
- 874d817baa16 17.0 cited
-
Explore alternative orderings of group-by pathkeys during optimization.
- 0452b461bc40 17.0 cited
On Wed, Aug 28, 2024 at 3:14 AM Jeff Davis <pgsql@j-davis.com> wrote: > > On Mon, 2024-08-26 at 14:18 -0700, Jeff Davis wrote: > > 0001 implementation issues: > > > > * We need default implementations for AMs that don't implement the > > new > > APIs, so that the AM will still function even if it only defines the > > single-tuple APIs. If we need to make use of the AM's multi_insert > > method (I'm not sure we do), then the default methods would need to > > handle that as well. (I thought a previous version had these default > > implementations -- is there a reason they were removed?) > > On second thought, it would be easier to just have the caller check > whether the AM supports the multi-insert path; and if not, fall back to > the single-tuple path. The single-tuple path is needed anyway for cases > like before-row triggers. Up until v21, the default implementation existed, see https://www.postgresql.org/message-id/CALj2ACX90L5Mb5Vv%3DjsvhOdZ8BVsfpZf-CdCGhtm2N%2BbGUCSjg%40mail.gmail.com. I then removed it in v22 to keep the code simple. IMO, every caller branching out in the code like if (rel->rd_tableam-> tuple_modify_buffer_insert != NULL) then multi insert; else single insert; doesn't look good. IMO, the default implementation approach keeps things simple which eventually can be removed in *near* future. Thoughts? One change in the default implementation I would do from that of v21 is to assign the default AMs in GetTableAmRoutine() itself to avoid if .. else if .. else in the table_modify_XXX(). -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com