From 81f5cf0283541874f6c9d2c2339e9326ff1ebee4 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 4 Oct 2019 00:19:49 +1300 Subject: [PATCH 2/2] WIP: Use querylocale() for collation versions on FreeBSD. Requires a WIP FreeBSD patch: https://reviews.freebsd.org/D17166 --- src/backend/utils/adt/pg_locale.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 694ff7626e..a66f1c1fbe 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1551,6 +1551,18 @@ get_collation_actual_version(char collprovider, const char *collcollate) #if defined(__GLIBC__) /* Use the glibc version because we don't have anything better. */ collversion = pstrdup(gnu_get_libc_version()); +#elif defined(LC_VERSION_MASK) + /* FreeBSD exposes the CLDR version. */ + locale_t loc = newlocale(LC_COLLATE, collcollate, NULL); + if (loc) + { + collversion = + pstrdup(querylocale(LC_COLLATE_MASK | LC_VERSION_MASK, loc)); + freelocale(loc); + } + else + ereport(ERROR, + (errmsg("could not load locale \"%s\"", collcollate))); #endif } -- 2.20.1