Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM
Jeff Davis <pgsql@j-davis.com>
From: Jeff Davis <pgsql@j-davis.com>
To: Matthias van de Meent <boekewurm+postgres@gmail.com>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.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>, Alexander
Korotkov <aekorotkov@gmail.com>
Date: 2024-08-27T05:42:27Z
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 Mon, 2024-08-26 at 23:59 +0200, Matthias van de Meent wrote: > Specifically, I'm having trouble seeing how this could be used to > implement ```INSERT INTO ... SELECT ... RETURNING ctid``` as I see no > returning output path for the newly inserted tuples' data, which is > usually required for our execution nodes' output path. Is support for > RETURN-clauses planned for this API? In a previous iteration, the > flush operation was capable of returning a TTS, but that seems to > have > been dropped, and I can't quite figure out why. I'm not sure where that was lost, but I suspect when we changed flushing to use a callback. I didn't get to v23-0003 yet, but I think you're right that the current flushing mechanism isn't right for returning tuples. Thank you. One solution: when the buffer is flushed, we can return an iterator over the buffered tuples to the caller. The caller can then use the iterator to insert into indexes, return a tuple to the executor, etc., and then release the iterator when done (freeing the buffer). That control flow is less convenient for most callers, though, so perhaps that should be optional? Regards, Jeff Davis