Re: pg_upgrade silently truncates nextMultiOffset to 32 bits

From: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>
To: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
Subject: Re: pg_upgrade silently truncates nextMultiOffset to 32 bits
Date: 2026-08-27 07:06:08
Message-ID: D0710380-D4E2-431F-B761-B4FE58AE7266@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> On Aug 27, 2026, at 08:59, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> wrote:
>
> Hi all,
> (CCing Heikki as the committer of commit bd8d9c9bdfa)
>
> Commit bd8d9c9bdfa widened MultiXactOffset to uint64, but I found that
> pg_upgrade still reads it as a uint32 value when reading the
> pg_controldata continents:
>
> else if ((p = strstr(bufin, "Latest checkpoint's NextMultiOffset:")) != NULL)
> {
> :
> p++; /* remove ':' char */
> cluster->controldata.chkpnt_nxtmxoff = str2uint(p);
>
> I think it should use strtou64() instead. The attached 0001 patch
> fixes it. It introduces str2uint64() as other fields are read by a
> similar helper function str2uint().
>
> Also, when checking other similar codes around the new
> MultiXactOffset, I found that pg_control_checkpoint() still reports
> the value as an xid. I think we should report it as bigint instead.
> What do you think? The attached 0002 patch fixes it.

bigint is a signed int64, so it cannot represent the full uint64 range, although perhaps this is only a theoretical concern. If we want to avoid this limitation, should we use numeric instead?

>
> Regards,
>
> --
> Masahiko Sawada
> Amazon Web Services: https://aws.amazon.com
> <0002-Report-next_multi_offset-as-bigint-in-pg_control_che.patch><0001-pg_upgrade-Read-nextMultiOffset-as-a-64-bit-value.patch>

Overall the patch looks good to me.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Masahiko Sawada 2026-08-27 07:35:17 Re: pg_upgrade silently truncates nextMultiOffset to 32 bits
Previous Message shveta malik 2026-08-27 06:31:08 Re: [PATCH] Preserve replication origin OIDs in pg_upgrade