postgresql/postgresql-upgrade-locale-spelling-2.patch
Pavel Raiskup 7fcd42641d upgrade: be more benevolent in locale comparison
In F20+, we should be OK for upgrades where locale changed like
from en_US.utf8 to en_US.UTF-8.

Resolves: #1007802
Version: 9.3.5-7
2014-10-20 12:04:05 +02:00

41 lines
1.5 KiB
Diff

From cd3e0071b8c9e082f5fe903a019d4e474be98e57 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 31 Jan 2014 02:03:30 -0500
Subject: [PATCH] Allow unrecognized encoding names in locales, as long as
they're the same.
The buildfarm says commit 58274728fb8e087049df67c0eee903d9743fdeda doesn't
work so well on Windows. This is because the encoding part of Windows
locale names can be just a code page number, eg "1252", which we don't
consider to be a valid encoding name. Add a check to accept encoding
parts that are case-insensitively string equal; this at least ensures
that the new code doesn't reject any cases that the old code allowed.
---
contrib/pg_upgrade/check.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
index 58c2d16..faeaff5 100644
--- a/contrib/pg_upgrade/check.c
+++ b/contrib/pg_upgrade/check.c
@@ -447,8 +447,14 @@ equivalent_locale(const char *loca, const char *locb)
if (!chara || !charb)
return (pg_strcasecmp(loca, locb) == 0);
- /* Compare the encoding parts. */
- if (!equivalent_encoding(chara + 1, charb + 1))
+ /*
+ * Compare the encoding parts. Windows tends to use code page numbers for
+ * the encoding part, which equivalent_encoding() won't like, so accept if
+ * the strings are case-insensitive equal; otherwise use
+ * equivalent_encoding() to compare.
+ */
+ if (pg_strcasecmp(chara + 1, charb + 1) != 0 &&
+ !equivalent_encoding(chara + 1, charb + 1))
return false;
/*
--
1.9.3