diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-01-16 12:12:49 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-01-16 13:28:19 +0200 |
commit | aa1d2fc5e91e396bec5bf8a8d10b6cc4af0b0fff (patch) | |
tree | 75c71dd8f92e53d71feb0037650e8f8121fc1d12 | |
parent | 28df6a0df0a78360629163c3df5b073ea6deeca6 (diff) | |
download | postgresql-aa1d2fc5e91e396bec5bf8a8d10b6cc4af0b0fff.tar.gz postgresql-aa1d2fc5e91e396bec5bf8a8d10b6cc4af0b0fff.zip |
Another attempt at fixing Windows Norwegian locale.
Previous fix mapped "Norwegian (Bokmål)" locale, which contains a non-ASCII
character, to the pure ASCII alias "norwegian-bokmal". However, it turns
out that more recent versions of the CRT library, in particular MSVCR110
(Visual Studio 2012), changed the behaviour of setlocale() so that if
you pass "norwegian-bokmal" to setlocale, it returns "Norwegian_Norway".
That meant trouble, when setlocale(..., NULL) first returned
"Norwegian (Bokmål)_Norway", which we mapped to "norwegian-bokmal_Norway",
but another call to setlocale(..., "norwegian-bokmal_Norway") returned
"Norwegian_Norway". That caused PostgreSQL to think that they are different
locales, and therefore not compatible. That caused initdb to fail at
CREATE DATABASE.
Older CRT versions seem to accept "Norwegian_Norway" too, so change the
mapping to return "Norwegian_Norway" instead of "norwegian-bokmal".
Backpatch to 9.2 like the previous attempt. We haven't made a release that
includes the previous fix yet, so we don't need to worry about changing the
locale of existing clusters from "norwegian-bokmal" to "Norwegian_Norway".
(Doing any mapping like this at all requires changing the locale of
existing databases; the release notes need to include instructions for
that).
-rw-r--r-- | src/port/win32setlocale.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/port/win32setlocale.c b/src/port/win32setlocale.c index cf54d4e3965..f253967c07c 100644 --- a/src/port/win32setlocale.c +++ b/src/port/win32setlocale.c @@ -97,7 +97,7 @@ static const struct locale_map locale_map_result[] = { * It's not clear what encoding setlocale() uses when it returns the * locale name, so to play it safe, we search for "Norwegian (Bok*l)". */ - {"Norwegian (Bokm", "l)", "norwegian-bokmal"}, + {"Norwegian (Bokm", "l)_Norway", "Norwegian_Norway"}, {NULL, NULL, NULL} }; |