aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/pg_locale.c9
-rw-r--r--src/test/regress/expected/collate.out3
-rw-r--r--src/test/regress/sql/collate.sql1
3 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index 12419fc8df9..9500c6b39f8 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -1227,13 +1227,18 @@ lc_ctype_is_c(Oid collation)
static void
report_newlocale_failure(const char *localename)
{
- /* copy errno in case one of the ereport auxiliary functions changes it */
- int save_errno = errno;
+ int save_errno;
+
+ /* On Windows, transform _create_locale() error to errno */
+#ifdef WIN32
+ _dosmaperr(GetLastError());
+#endif
/*
* ENOENT means "no such locale", not "no such file", so clarify that
* errno with an errdetail message.
*/
+ save_errno = errno; /* auxiliary funcs might change errno */
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("could not create locale \"%s\": %m",
diff --git a/src/test/regress/expected/collate.out b/src/test/regress/expected/collate.out
index b0025c0a87e..70866df000b 100644
--- a/src/test/regress/expected/collate.out
+++ b/src/test/regress/expected/collate.out
@@ -627,6 +627,9 @@ CREATE COLLATION mycoll1 FROM "C";
CREATE COLLATION mycoll2 ( LC_COLLATE = "POSIX", LC_CTYPE = "POSIX" );
CREATE COLLATION mycoll3 FROM "default"; -- intentionally unsupported
ERROR: collation "default" cannot be copied
+CREATE COLLATION mycoll4 ( LOCALE = "no_such_locale" ); -- fail
+ERROR: could not create locale "no_such_locale": No such file or directory
+DETAIL: The operating system could not find any locale data for the locale name "no_such_locale".
DROP COLLATION mycoll1;
CREATE TABLE collate_test23 (f1 text collate mycoll2);
DROP COLLATION mycoll2; -- fail
diff --git a/src/test/regress/sql/collate.sql b/src/test/regress/sql/collate.sql
index 698f5774906..f095ae08be7 100644
--- a/src/test/regress/sql/collate.sql
+++ b/src/test/regress/sql/collate.sql
@@ -234,6 +234,7 @@ EXPLAIN (COSTS OFF)
CREATE COLLATION mycoll1 FROM "C";
CREATE COLLATION mycoll2 ( LC_COLLATE = "POSIX", LC_CTYPE = "POSIX" );
CREATE COLLATION mycoll3 FROM "default"; -- intentionally unsupported
+CREATE COLLATION mycoll4 ( LOCALE = "no_such_locale" ); -- fail
DROP COLLATION mycoll1;
CREATE TABLE collate_test23 (f1 text collate mycoll2);