From 509fc72ea93dbdac6294c00eb421c368cf981764 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 19 Oct 2026 20:44:48 -0400
Subject: [PATCH v1 1/3] findtimezone: separate old Windows zone names from
 current ones.

In preparation for generating the Windows zone name mapping list
from CLDR data, separate out the legacy names we're carrying and
move them to the end of the list.  This commit does not change
any behavior, merely re-order the array.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/179219370621.3670768.16110484606338109870@cybernative.ai
Backpatch-through: 14
---
 src/bin/initdb/findtimezone.c | 234 ++++++++++++++++++----------------
 1 file changed, 123 insertions(+), 111 deletions(-)

diff --git a/src/bin/initdb/findtimezone.c b/src/bin/initdb/findtimezone.c
index c7e8ff6d40b..9912484d64f 100644
--- a/src/bin/initdb/findtimezone.c
+++ b/src/bin/initdb/findtimezone.c
@@ -771,11 +771,6 @@ static const struct
 		"Argentina Standard Time", "Argentina Daylight Time",
 		"America/Buenos_Aires"
 	},
-	{
-		/* (UTC+04:00) Baku, Tbilisi, Yerevan */
-		"Armenian Standard Time", "Armenian Daylight Time",
-		"Asia/Yerevan"
-	},
 	{
 		/* (UTC+04:00) Astrakhan, Ulyanovsk */
 		"Astrakhan Standard Time", "Astrakhan Daylight Time",
@@ -831,11 +826,6 @@ static const struct
 		"Bougainville Standard Time", "Bougainville Daylight Time",
 		"Pacific/Bougainville"
 	},
-	{
-		/* (UTC-01:00) Cabo Verde Is. */
-		"Cabo Verde Standard Time", "Cabo Verde Daylight Time",
-		"Atlantic/Cape_Verde"
-	},
 	{
 		/* (UTC-06:00) Saskatchewan */
 		"Canada Central Standard Time", "Canada Central Daylight Time",
@@ -906,11 +896,6 @@ static const struct
 		"China Standard Time", "China Daylight Time",
 		"Asia/Shanghai"
 	},
-	{
-		/* (UTC) Coordinated Universal Time */
-		"Coordinated Universal Time", "Coordinated Universal Time",
-		"UTC"
-	},
 	{
 		/* (UTC-05:00) Havana */
 		"Cuba Standard Time", "Cuba Daylight Time",
@@ -1033,11 +1018,6 @@ static const struct
 		"Israel Standard Time", "Israel Daylight Time",
 		"Asia/Jerusalem"
 	},
-	{
-		/* (UTC+02:00) Jerusalem (old spelling of zone name) */
-		"Jerusalem Standard Time", "Jerusalem Daylight Time",
-		"Asia/Jerusalem"
-	},
 	{
 		/* (UTC+02:00) Amman */
 		"Jordan Standard Time", "Jordan Daylight Time",
@@ -1048,11 +1028,6 @@ static const struct
 		"Kaliningrad Standard Time", "Kaliningrad Daylight Time",
 		"Europe/Kaliningrad"
 	},
-	{
-		/* (UTC+12:00) Petropavlovsk-Kamchatsky - Old */
-		"Kamchatka Standard Time", "Kamchatka Daylight Time",
-		"Asia/Kamchatka"
-	},
 	{
 		/* (UTC+09:00) Seoul */
 		"Korea Standard Time", "Korea Daylight Time",
@@ -1083,11 +1058,6 @@ static const struct
 		"Magallanes Standard Time", "Magallanes Daylight Time",
 		"America/Punta_Arenas"
 	},
-	{
-		/* (UTC+08:00) Kuala Lumpur, Singapore */
-		"Malay Peninsula Standard Time", "Malay Peninsula Daylight Time",
-		"Asia/Kuala_Lumpur"
-	},
 	{
 		/* (UTC-09:30) Marquesas Islands */
 		"Marquesas Standard Time", "Marquesas Daylight Time",
@@ -1098,21 +1068,6 @@ static const struct
 		"Mauritius Standard Time", "Mauritius Daylight Time",
 		"Indian/Mauritius"
 	},
-	{
-		/* (UTC-06:00) Guadalajara, Mexico City, Monterrey */
-		"Mexico Standard Time", "Mexico Daylight Time",
-		"America/Mexico_City"
-	},
-	{
-		/* (UTC-07:00) Chihuahua, La Paz, Mazatlan */
-		"Mexico Standard Time 2", "Mexico Daylight Time 2",
-		"America/Chihuahua"
-	},
-	{
-		/* (UTC-02:00) Mid-Atlantic - Old */
-		"Mid-Atlantic Standard Time", "Mid-Atlantic Daylight Time",
-		"Atlantic/South_Georgia"
-	},
 	{
 		/* (UTC+02:00) Beirut */
 		"Middle East Standard Time", "Middle East Daylight Time",
@@ -1188,11 +1143,6 @@ static const struct
 		"North Korea Standard Time", "North Korea Daylight Time",
 		"Asia/Pyongyang"
 	},
-	{
-		/* (UTC+07:00) Novosibirsk */
-		"Novosibirsk Standard Time", "Novosibirsk Daylight Time",
-		"Asia/Novosibirsk"
-	},
 	{
 		/* (UTC+06:00) Omsk */
 		"Omsk Standard Time", "Omsk Daylight Time",
@@ -1233,11 +1183,6 @@ static const struct
 		"Romance Standard Time", "Romance Daylight Time",
 		"Europe/Paris"
 	},
-	{
-		/* (UTC+04:00) Izhevsk, Samara */
-		"Russia Time Zone 3", "Russia Time Zone 3",
-		"Europe/Samara"
-	},
 	{
 		/* (UTC+11:00) Chokurdakh */
 		"Russia Time Zone 10", "Russia Time Zone 10",
@@ -1248,61 +1193,11 @@ static const struct
 		"Russia Time Zone 11", "Russia Time Zone 11",
 		"Asia/Kamchatka"
 	},
-	{
-		/* (UTC+02:00) Kaliningrad */
-		"Russia TZ 1 Standard Time", "Russia TZ 1 Daylight Time",
-		"Europe/Kaliningrad"
-	},
-	{
-		/* (UTC+03:00) Moscow, St. Petersburg */
-		"Russia TZ 2 Standard Time", "Russia TZ 2 Daylight Time",
-		"Europe/Moscow"
-	},
 	{
 		/* (UTC+04:00) Izhevsk, Samara */
-		"Russia TZ 3 Standard Time", "Russia TZ 3 Daylight Time",
+		"Russia Time Zone 3", "Russia Time Zone 3",
 		"Europe/Samara"
 	},
-	{
-		/* (UTC+05:00) Ekaterinburg */
-		"Russia TZ 4 Standard Time", "Russia TZ 4 Daylight Time",
-		"Asia/Yekaterinburg"
-	},
-	{
-		/* (UTC+06:00) Novosibirsk (RTZ 5) */
-		"Russia TZ 5 Standard Time", "Russia TZ 5 Daylight Time",
-		"Asia/Novosibirsk"
-	},
-	{
-		/* (UTC+07:00) Krasnoyarsk */
-		"Russia TZ 6 Standard Time", "Russia TZ 6 Daylight Time",
-		"Asia/Krasnoyarsk"
-	},
-	{
-		/* (UTC+08:00) Irkutsk */
-		"Russia TZ 7 Standard Time", "Russia TZ 7 Daylight Time",
-		"Asia/Irkutsk"
-	},
-	{
-		/* (UTC+09:00) Yakutsk */
-		"Russia TZ 8 Standard Time", "Russia TZ 8 Daylight Time",
-		"Asia/Yakutsk"
-	},
-	{
-		/* (UTC+10:00) Vladivostok */
-		"Russia TZ 9 Standard Time", "Russia TZ 9 Daylight Time",
-		"Asia/Vladivostok"
-	},
-	{
-		/* (UTC+11:00) Chokurdakh */
-		"Russia TZ 10 Standard Time", "Russia TZ 10 Daylight Time",
-		"Asia/Magadan"
-	},
-	{
-		/* (UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky */
-		"Russia TZ 11 Standard Time", "Russia TZ 11 Daylight Time",
-		"Asia/Anadyr"
-	},
 	{
 		/* (UTC+03:00) Moscow, St. Petersburg */
 		"Russian Standard Time", "Russian Daylight Time",
@@ -1518,11 +1413,6 @@ static const struct
 		"West Asia Standard Time", "West Asia Daylight Time",
 		"Asia/Tashkent"
 	},
-	{
-		/* (UTC+02:00) Gaza, Hebron */
-		"West Bank Gaza Standard Time", "West Bank Gaza Daylight Time",
-		"Asia/Gaza"
-	},
 	{
 		/* (UTC+02:00) Gaza, Hebron */
 		"West Bank Standard Time", "West Bank Daylight Time",
@@ -1543,6 +1433,128 @@ static const struct
 		"Yukon Standard Time", "Yukon Daylight Time",
 		"America/Whitehorse"
 	},
+
+	/*
+	 * END of CLDR-derived entries
+	 */
+
+	/*
+	 * Obsolete zones, or just obsolete spellings of their names. These are no
+	 * longer derivable from CLDR, but should be kept to support older Windows
+	 * installations.
+	 */
+
+	{
+		/* (UTC+04:00) Baku, Tbilisi, Yerevan */
+		"Armenian Standard Time", "Armenian Daylight Time",
+		"Asia/Yerevan"
+	},
+	{
+		/* (UTC-01:00) Cabo Verde Is. */
+		"Cabo Verde Standard Time", "Cabo Verde Daylight Time",
+		"Atlantic/Cape_Verde"
+	},
+	{
+		/* (UTC) Coordinated Universal Time */
+		"Coordinated Universal Time", "Coordinated Universal Time",
+		"UTC"
+	},
+	{
+		/* (UTC+02:00) Jerusalem */
+		"Jerusalem Standard Time", "Jerusalem Daylight Time",
+		"Asia/Jerusalem"
+	},
+	{
+		/* (UTC+12:00) Petropavlovsk-Kamchatsky */
+		"Kamchatka Standard Time", "Kamchatka Daylight Time",
+		"Asia/Kamchatka"
+	},
+	{
+		/* (UTC+08:00) Kuala Lumpur, Singapore */
+		"Malay Peninsula Standard Time", "Malay Peninsula Daylight Time",
+		"Asia/Kuala_Lumpur"
+	},
+	{
+		/* (UTC-06:00) Guadalajara, Mexico City, Monterrey */
+		"Mexico Standard Time", "Mexico Daylight Time",
+		"America/Mexico_City"
+	},
+	{
+		/* (UTC-07:00) Chihuahua, La Paz, Mazatlan */
+		"Mexico Standard Time 2", "Mexico Daylight Time 2",
+		"America/Chihuahua"
+	},
+	{
+		/* (UTC-02:00) Mid-Atlantic */
+		"Mid-Atlantic Standard Time", "Mid-Atlantic Daylight Time",
+		"Atlantic/South_Georgia"
+	},
+	{
+		/* (UTC+07:00) Novosibirsk */
+		"Novosibirsk Standard Time", "Novosibirsk Daylight Time",
+		"Asia/Novosibirsk"
+	},
+	{
+		/* (UTC+02:00) Kaliningrad */
+		"Russia TZ 1 Standard Time", "Russia TZ 1 Daylight Time",
+		"Europe/Kaliningrad"
+	},
+	{
+		/* (UTC+03:00) Moscow, St. Petersburg */
+		"Russia TZ 2 Standard Time", "Russia TZ 2 Daylight Time",
+		"Europe/Moscow"
+	},
+	{
+		/* (UTC+04:00) Izhevsk, Samara */
+		"Russia TZ 3 Standard Time", "Russia TZ 3 Daylight Time",
+		"Europe/Samara"
+	},
+	{
+		/* (UTC+05:00) Ekaterinburg */
+		"Russia TZ 4 Standard Time", "Russia TZ 4 Daylight Time",
+		"Asia/Yekaterinburg"
+	},
+	{
+		/* (UTC+06:00) Novosibirsk (RTZ 5) */
+		"Russia TZ 5 Standard Time", "Russia TZ 5 Daylight Time",
+		"Asia/Novosibirsk"
+	},
+	{
+		/* (UTC+07:00) Krasnoyarsk */
+		"Russia TZ 6 Standard Time", "Russia TZ 6 Daylight Time",
+		"Asia/Krasnoyarsk"
+	},
+	{
+		/* (UTC+08:00) Irkutsk */
+		"Russia TZ 7 Standard Time", "Russia TZ 7 Daylight Time",
+		"Asia/Irkutsk"
+	},
+	{
+		/* (UTC+09:00) Yakutsk */
+		"Russia TZ 8 Standard Time", "Russia TZ 8 Daylight Time",
+		"Asia/Yakutsk"
+	},
+	{
+		/* (UTC+10:00) Vladivostok */
+		"Russia TZ 9 Standard Time", "Russia TZ 9 Daylight Time",
+		"Asia/Vladivostok"
+	},
+	{
+		/* (UTC+11:00) Chokurdakh */
+		"Russia TZ 10 Standard Time", "Russia TZ 10 Daylight Time",
+		"Asia/Magadan"
+	},
+	{
+		/* (UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky */
+		"Russia TZ 11 Standard Time", "Russia TZ 11 Daylight Time",
+		"Asia/Anadyr"
+	},
+	{
+		/* (UTC+02:00) Gaza, Hebron */
+		"West Bank Gaza Standard Time", "West Bank Gaza Daylight Time",
+		"Asia/Gaza"
+	},
+
 	{
 		NULL, NULL, NULL
 	}
-- 
2.52.0

