| From: | Andres Freund <andres(at)anarazel(dot)de> |
|---|---|
| To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
| Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Subject: | Re: Decoupling our alignment assumptions about int64 and double |
| Date: | 2026-02-05 22:00:42 |
| Message-ID: | 2krmsgtgwtzauvolorina2xb2hu64thttutspd4yilsstypakm@gvtlwtdt2b7h |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi,
On 2026-02-03 17:29:46 -0500, Tom Lane wrote:
> I wrote:
> > Attached a v3 of the main patch (now again numbered 0001), plus
> > new work in 0002 that adds the two new alignment values to
> > pg_control and insists on a match before pg_upgrade'ing.
>
> I've gotten cold feet about this whole idea, and no longer think
> we should pursue it. Aside from the problems already raised,
> consider this: what would extensions do with existing int64-based
> data types? We don't have any provision for altering the typalign
> of an existing type, and if we did it would imply doing table
> rewrites (at least for cases where the change wasn't effectively
> a no-op). Worse, if such a type is created using "LIKE int8"
> which has always been best practice, then whether it shows up
> with align 'l' or 'd' in a new installation will depend on whether
> you pg_upgrade'd or installed the extension fresh. So that looks
> like a mess waiting to happen. Combine that with extensions that
> manually set alignment = double, and never bother to update because
> they can't change it and don't care anyway, and the inevitable end
> result is that the 'l' and 'd' cases will be so randomly assigned
> that there's not a meaningful difference after all. Perhaps we
> could have got away with such a change in the pre-pg_upgrade era,
> but I think we cannot now.
I can't really see a way to avoid these issues either :(
> If we want to re-support AIX, I think we're stuck with going back
> to the old way of calculating MAXALIGN, and then re-instituting that
> regression test that checked for unsafely-aligned catalog columns.
> Bleah. Still, as long as the regression test is accurate, it seems
> like that'd be an annoyance not a major headache.
I am pretty unhappy about that, I think the test and rules are just about
incomprehensible. I wonder if we ought to instead just redefine float8 to be
be aligned to 8 bytes, leaving double alone. Something like
#if ALIGNOF_DOUBLE < ALIGNOF_LONG
typedef double __attribute__((aligned(8))) float8;
#define ALIGNOF_FLOAT* ALIGNOF_LONG
#else
typedef double float8;
#define ALIGNOF_FLOAT8 ALIGNOF_DOUBLE
#endif
should do the trick.
Greetings,
Andres Freund
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Peter Smith | 2026-02-05 22:58:02 | Re: Warn when creating or enabling a subscription with max_logical_replication_workers = 0 |
| Previous Message | Nathan Bossart | 2026-02-05 21:29:55 | Re: pg_upgrade: transfer pg_largeobject_metadata's files when possible |