From: | Sandeep Thakkar <sandeep(dot)thakkar(at)enterprisedb(dot)com> |
---|---|
To: | Ben Caspi <benc(at)aidoc(dot)com> |
Cc: | pgsql-bugs(at)lists(dot)postgresql(dot)org, Liran Amrani <lirana(at)aidoc(dot)com>, Avi Uziel <avi(dot)uziel(at)aidoc(dot)com>, Shahar Amram <shahara(at)aidoc(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
Subject: | Re: PostgreSQL Windows Installer defaults to "English_United States.1252" when choosing locale starting with "English" |
Date: | 2025-08-19 10:35:15 |
Message-ID: | CANFyU960MDYNYHA-o_iF4Uoh21TP2=dP97_u2HSL_GSSjit0wQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hi Ben,
The recent minor release includes the fix for this. The installer script
converts the "English, <Country>" with "<English_<Country>" before passing
the locale to initdb.exe. Please have a look.
Thanks for the report.
On Sun, Jul 13, 2025 at 4:22 PM Sandeep Thakkar <
sandeep(dot)thakkar(at)enterprisedb(dot)com> wrote:
>
>
> On Thu, Jul 10, 2025 at 7:24 AM Thomas Munro <thomas(dot)munro(at)gmail(dot)com>
> wrote:
>
>> On Thu, Jul 10, 2025 at 12:41 AM Sandeep Thakkar
>> <sandeep(dot)thakkar(at)enterprisedb(dot)com> wrote:
>> > Yes, you are correct. I got the same result. But it was correct when I
>> chose the BCP-47 name like en-uk. Probably something to do with how initdb
>> is handling the long names.
>>
>> What's the exact initdb command in this case? I'm a bit confused
>> about ""English, United Kingdom" vs "English_United Kingdom.1252". I
>> think maybe the Windows C library is doing this, because that first
>> form isn't really a supported form, and it only manages to grok the
>> first word with some best-match scheme? I don't have Windows but I
>> just pushed a stupid test program to CI to test that theory:
>>
>> #include <locale.h>
>> #include <stdio.h>
>> #include <stdlib.h>
>>
>> const char *or_null(const char *s)
>> {
>> return s == NULL ? "<null>" : s;
>> }
>>
>> int
>> main(int argc, char *argv[])
>> {
>> if (setlocale(LC_ALL, "English, United Kingdom") == NULL)
>> printf("error 1\n");
>> printf("got: %s\n", or_null(setlocale(LC_ALL, NULL)));
>> if (setlocale(LC_ALL, "English_United Kingdom") == NULL)
>> printf("error 2\n");
>> printf("got: %s\n", or_null(setlocale(LC_ALL, NULL)));
>> if (setlocale(LC_ALL, "English_United Kingdom.1252") == NULL)
>> printf("error 3\n");
>> printf("got: %s\n", or_null(setlocale(LC_ALL, NULL)));
>> return EXIT_SUCCESS;
>> }
>>
>> And lo and behold it printed:
>>
>> got: English_United States.1252
>> got: English_United Kingdom.1252
>> got: English_United Kingdom.1252
>>
>> Apparently it really needs that underscore.
>>
>
> Here is the initdb command:
> ---
> Executing: "C:\Program Files\PostgreSQL\17\bin\initdb.exe"
> --pgdata="C:\Program Files\PostgreSQL\17\data" --username="postgres"
> --encoding=UTF8
> --pwfile="C:\Users\sandeep\AppData\Local\Temp\postgresql_installer_c27ed92f26\212da2e5.tmp"
> --auth=scram-sha-256 --locale="English, United Kingdom"
>
> The files belonging to this database system will be owned by user
> "sandeep".
> This user must also own the server process.
>
> The database cluster will be initialized with locale "English_United
> States.1252".
> The default text search configuration will be set to "english".
> ...
> ...
> --
>
> If initdb needs the underscore, then I guess those names need to be
> converted in the script:
>
> https://github.com/EnterpriseDB/edb-installers/blob/REL-17/server/scripts/windows/getlocales.ps1
>
>
> --
> Sandeep Thakkar
>
>
>
--
Sandeep Thakkar
From | Date | Subject | |
---|---|---|---|
Next Message | Kirill Reshke | 2025-08-19 12:54:27 | Re: BUG #19024: Error when trying to use pg_dump of new server on old server |
Previous Message | PG Bug reporting form | 2025-08-19 10:21:28 | BUG #19025: PostgreSQL log is not rotated |