pg_upgrade: Preserve default char signedness value from old cluster.
authorMasahiko Sawada <msawada@postgresql.org>
Fri, 21 Feb 2025 18:19:40 +0000 (10:19 -0800)
committerMasahiko Sawada <msawada@postgresql.org>
Fri, 21 Feb 2025 18:19:40 +0000 (10:19 -0800)
commita8238f87f980848c2d69c105555c4383e20e7670
treec9d44e42f5649244673245bab5427fff428c2939
parent30666d1857d7a785331f5805c20ec19430500466
pg_upgrade: Preserve default char signedness value from old cluster.

Commit 44fe30fdab6 introduced the 'default_char_signedness' field in
controlfile. Newly created database clusters always set this field to
'signed'.

This change ensures that pg_upgrade updates the
'default_char_signedness' to 'unsigned' if the source database cluster
has signedness=false. For source clusters from v17 or earlier, which
lack the 'default_char_signedness' information, pg_upgrade assumes the
source cluster was initialized on the same platform where pg_upgrade
is running. It then sets the 'default_char_signedness' value according
to the current platform's default character signedness.

Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/CB11ADBC-0C3F-4FE0-A678-666EE80CBB07%40amazon.com
src/bin/pg_upgrade/controldata.c
src/bin/pg_upgrade/pg_upgrade.c
src/bin/pg_upgrade/pg_upgrade.h
src/bin/pg_upgrade/t/005_char_signedness.pl [new file with mode: 0644]