pg_resetwal prints new OldestXID in wrong circumstances

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: "pgsql-bugs@lists.postgresql.org" <pgsql-bugs@lists.postgresql.org>
Date: 2025-11-19T09:52:31Z
Lists: pgsql-bugs

Attachments

When the --oldest-transaction-id option is used, pg_resetwal doesn't 
print the new value like it does for other similar options. For example, 
if you use --next-oid and --oldest-transaction-id, only the new NextOID 
value is printed:

> $ pg_resetwal --dry-run -D data --next-oid 10  --oldest-transaction-id 100
> Current pg_control values:
> 
> ...
> 
> Values to be changed:
> 
> First log segment after reset:        000000010000000000000005
> NextOID:                              10

Printing the new OldestXID value is incorrectly tied to whether the 
--next-transaction-id option is given, so this prints it, even though 
OldestXID is not being modified:

> $ pg_resetwal --dry-run -D data --next-oid 10  --next-transaction-id 100
> Current pg_control values:
> 
> ...
> 
> 
> Values to be changed:
> 
> First log segment after reset:        000000010000000000000005
> NextOID:                              10
> NextXID:                              100
> OldestXID:                            744
> OldestXID's DB:                       1

This seems to have been an oversight when the --oldest-transaction-id 
option was added (commit 74cf7d46a91d). Before that, OldestXID was reset 
when the --next-transaction-id option was given.

Fix attached. Barring objections, I will commit and backpatch this.

- Heikki