Re: Reduce TupleHashEntryData struct size by half

Jeff Davis <pgsql@j-davis.com>

From: Jeff Davis <pgsql@j-davis.com>
To: David Rowley <dgrowleyml@gmail.com>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>, pgsql-hackers@postgresql.org
Date: 2025-01-14T18:47:32Z
Lists: pgsql-hackers
On Tue, 2025-01-14 at 22:01 +1300, David Rowley wrote:
> The trick would be to ensure ExecClearTuple() still works.

I'm confused by this. The comment over copy_minimal_slot says:

/*
 * Return a copy of minimal tuple representing the contents of the
slot.
 * The copy needs to be palloc'd in the current memory context. The
slot
 * itself is expected to remain unaffected. It is *not* expected to
have
 * meaningful "system columns" in the copy. The copy is not be "owned"
by
 * the slot i.e. the caller has to take responsibility to free memory
 * consumed by the slot.
 */

So why would ExecClearTuple() be a problem?

Regards,
	Jeff Davis




Commits

  1. Comment fixups from 626df47ad9.

  2. Remove 'additional' pointer from TupleHashEntryData.

  3. Add ExecCopySlotMinimalTupleExtra().

  4. Create accessor functions for TupleHashEntry.

  5. TupleHashTable: store additional data along with tuple.

  6. ExecInitAgg: update aggstate->numaggs and ->numtrans earlier.

  7. nodeSetOp.c: missing additionalsize for BuildTupleHashTable().

  8. Remove unused TupleHashTableData->entrysize.

  9. Add missing typedefs.list entry for AggStatePerGroupData.