Hi, Currently the libc collation version for Windows has two components coming from the NLSVERSIONINFOEX structure [1] dwNLSVersion and dwDefinedVersion
So we get version numbers looking like this (with 16 beta1): postgres=# select collversion,count(*) from pg_collation group by collversion; collversion | count ---------------+------- | 5 1539.5,1539.5 | 1457 (2 rows) According to [1] the second number is obsolete, and AFAICS we should expose only the first. <quote> dwDefinedVersion Defined version. This value is used to track changes in the repertoire of Unicode code points. The value increments when the Unicode repertoire is extended, for example, if more characters are defined. Starting with Windows 8: Deprecated. Use dwNLSVersion instead. </quote> PFA a patch implementing that suggestion. [1] https://learn.microsoft.com/en-us/windows/win32/api/winnls/ns-winnls-nlsversioninfoex Best regards, -- Daniel Vérité https://postgresql.verite.pro/ Twitter: @DanielVerite
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 31e3b16ae0..3a6b00ab14 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1717,11 +1717,9 @@ get_collation_actual_version(char collprovider, const char *collcollate) collcollate, GetLastError()))); } - collversion = psprintf("%lu.%lu,%lu.%lu", + collversion = psprintf("%lu.%lu", (version.dwNLSVersion >> 8) & 0xFFFF, - version.dwNLSVersion & 0xFF, - (version.dwDefinedVersion >> 8) & 0xFFFF, - version.dwDefinedVersion & 0xFF); + version.dwNLSVersion & 0xFF); #endif }