On 02.04.22 10:13, Noah Misch wrote:
uint64 and pg_lsn use TYPALIGN_DOUBLE. For AIX, they really need a typalign
corresponding to ALIGNOF_LONG. Hence, the C struct layout doesn't match the
tuple layout. Columns potentially affected:
[local] test=*# select attrelid::regclass, attname from pg_attribute a join pg_class
c on c.oid = attrelid where attalign = 'd' and relkind = 'r' and attnotnull and
attlen <> -1;
attrelid │ attname
─────────────────┼──────────────
pg_sequence │ seqstart
pg_sequence │ seqincrement
pg_sequence │ seqmax
pg_sequence │ seqmin
pg_sequence │ seqcache
pg_subscription │ subskiplsn
(6 rows)
The pg_sequence fields evade trouble, because there's exactly eight bytes (two
oids) before them.
Yes, we carefully did this when we ran into this the last time. See
<https://www.postgresql.org/message-id/flat/76ce2ca3-40f2-d291-eae2-17b599f29ba0%402ndquadrant.com#cf1313adff98e1d5e1ca789497898310>
and commit f3b421da5f4addc95812b9db05a24972b8fd9739.