Re: Making type Datum be 8 bytes everywhere
Joe Conway <mail@joeconway.com>
From: Joe Conway <mail@joeconway.com>
To: Tom Lane <tgl@sss.pgh.pa.us>, Michael Paquier <michael@paquier.xyz>
Cc: Peter Eisentraut <peter@eisentraut.org>,
Andres Freund <andres@anarazel.de>, pgsql-hackers@lists.postgresql.org,
Robert Haas <robertmhaas@gmail.com>
Date: 2025-08-09T11:45:16Z
Lists: pgsql-hackers
On 8/8/25 21:14, Tom Lane wrote: > I have just realized that this proposal has a rather nasty defect. > Per the following comment in spgist_private.h: > > * If the prefix datum is of a pass-by-value type, it is stored in its > * Datum representation, that is its on-disk representation is of length > * sizeof(Datum). This is a fairly unfortunate choice, because in no other > * place does Postgres use Datum as an on-disk representation; it creates > * an unnecessary incompatibility between 32-bit and 64-bit builds. But the > * compatibility loss is mostly theoretical since MAXIMUM_ALIGNOF typically > * differs between such builds, too. Anyway we're stuck with it now. > > This means we cannot change sizeof(Datum), nor reconsider the > pass-by-value classification of any datatype, without potentially > breaking pg_upgrade of some SP-GiST indexes on 32-bit machines. > > Now, it looks like this doesn't affect any in-core SP-GiST opclasses. > The only one using a potentially affected type is kd_point_ops which > uses a float8 prefix. That'll have been stored in regular on-disk > format on a 32-bit machine, but if we redefine it as being stored > in 64-bit-Datum format, nothing actually changes. The case that > would be problematic is a prefix type that's 4 bytes or less, and > I don't see any. > > A quick search of Debian Code Search doesn't find any extensions > that look like they are using small pass-by-value prefixes either. > So maybe we can get away with just changing this, but it's worrisome. > > On the positive side, even if there are any SP-GiST opclasses that > are at risk, the population of installations using them on 32-bit > installs has got to be pretty tiny. I bet it is indistinguishable from zero... > And the worst-case answer is that you'd have to reindex such indexes > after pg_upgrade. ...and this seems like a reasonable answer if anyone pops up. > BTW, I don't think we can teach pg_upgrade to check for this > hazard, because the SP-GiST APIs are such that the data type > used for prefixes isn't visible at the SQL level. > > Do we think that making this change is valuable enough to justify > taking such a risk? yes +1 -- Joe Conway PostgreSQL Contributors Team Amazon Web Services: https://aws.amazon.com
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Avoid faulty alignment of Datums in build_sorted_items().
- 09036dc71c68 19 (unreleased) landed
-
Grab the low-hanging fruit from forcing USE_FLOAT8_BYVAL to true.
- ee54046601de 19 (unreleased) landed
-
Grab the low-hanging fruit from forcing sizeof(Datum) to 8.
- 6aebedc38497 19 (unreleased) landed
-
Make type Datum be 8 bytes wide everywhere.
- 2a600a93c7be 19 (unreleased) landed
-
Mop-up for Datum conversion cleanups.
- 665c3dbba497 19 (unreleased) landed