On 27/08/2026 11:20, Heikki Linnakangas wrote:
Sorry, I missed this reply of yours earlier.

On 27/08/2026 10:35, Masahiko Sawada wrote:
On Thu, Aug 27, 2026 at 12:06 AM Chao Li <[email protected]> wrote:
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?

I'd prefer to keep bigint here. pg_get_multixact_stats() already
reports num_members and members_size as int8, and both are derived
from these same offsets. Also, other fields in pg_control_checkpoint()
are fixed-width types, whereas numeric is pass-by-reference.

I considered using xid8 instead but it has only comparison operators
and no arithmetic, so we couldn't compute a delta between two
checkpoints.

Hmm, that's a good point, although 'xid' didn't have those operators or arithmetic either.

That was inaccurate: both 'xid' and 'xid8' do have comparison operators. But they don't have a "minus" or "diff" operator, so you indeed cannot easily do "b - a".

I don't have a strong opinion, I'm happy with either bigint or xid8 here. Bigint is probably more convenient in practice, and it's good to not confuse mxact offsets with transaction ids by abusing the xid8 type. Then again, it was 'xid' before, which had the same issues and we went with 'xid' anyway. Then again, now that it doesn't wrap around anymore, maybe 'bigint' makes more sense now.

Would you like to decide and commit this, or would you prefer me to do it?

- Heikki



Reply via email to