Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oZTGm-0002L6-Hu for pgsql-hackers@arkaria.postgresql.org; Sat, 17 Sep 2022 08:33:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oZTGj-0004AZ-OU for pgsql-hackers@arkaria.postgresql.org; Sat, 17 Sep 2022 08:33:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oZTGj-0004AQ-8x for pgsql-hackers@lists.postgresql.org; Sat, 17 Sep 2022 08:33:45 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oZTGY-0005Jb-Gj for pgsql-hackers@postgresql.org; Sat, 17 Sep 2022 08:33:43 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 2032D21C04FB; Sat, 17 Sep 2022 11:33:31 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1663403611; bh=cbkQFbeP0W29EtufC1Nptd8yTuAHmDmXsyE7FpO6ZHk=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=VpWutAZRXxlSStGy7djznPtnwGtbpJ7hxiU9wQnV9sAJ6ahDs2NUtNffwfrh56vdH DupGu937PS3nRjGVtJJwRA1tocUznG8+Dq7BI9y9ICrY3rKMfo6ifS4qMTso2DsRKg 6OYYbgmc6i+Hz7SS+sXFiRJplvE4l4j2PbE4zVqg= MIME-Version: 1.0 Date: Sat, 17 Sep 2022 11:33:30 +0300 From: Marina Polyakova To: Peter Eisentraut Cc: Kyotaro Horiguchi , pgsql-hackers@postgresql.org, pryzby@telsasoft.com, rjuju123@gmail.com, daniel@manitou-mail.org, AndrewBille@gmail.com, michael@paquier.xyz Subject: Re: ICU for global collation In-Reply-To: <65ef1a8a-1fc3-3dc3-c7aa-6b9f649014b2@enterprisedb.com> References: <1f86f120-7b02-68f6-a434-132d054afe33@enterprisedb.com> <38d2aac40a991b20adf032e509c6eff5@postgrespro.ru> <6dd6db0984d86a51b7255ba79f111971@postgrespro.ru> <20220915.155210.529619933474389138.horikyota.ntt@gmail.com> <65ef1a8a-1fc3-3dc3-c7aa-6b9f649014b2@enterprisedb.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <9ba4cd1ea6ed6b7b15c0ff15e6f540cd@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru Organization: Postgres Professional Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Thanks to Kyotaro Horiguchi review we found out that there're interesting cases due to the order of some ICU checks: 1. ICU locale vs supported encoding: 1.1. On 2022-09-15 09:52, Kyotaro Horiguchi wrote: > If I executed initdb as follows, I would be told to specify > --icu-locale option. > >> $ initdb --encoding sql-ascii --locale-provider icu hoge >> ... >> initdb: error: ICU locale must be specified > > However, when I reran the command, it complains about incompatible > encoding this time. I think it's more user-friendly to check for the > encoding compatibility before the check for missing --icu-locale > option. 1.2. (ok?) $ initdb --encoding sql-ascii --icu-locale en-US hoge initdb: error: --icu-locale cannot be specified unless locale provider "icu" is chosen $ initdb --encoding sql-ascii --icu-locale en-US --locale-provider icu hoge ... initdb: error: encoding mismatch initdb: detail: The encoding you selected (SQL_ASCII) is not supported with the ICU provider. initdb: hint: Rerun initdb and either do not specify an encoding explicitly, or choose a matching combination. $ createdb --encoding sql-ascii --icu-locale en-US hoge createdb: error: database creation failed: ERROR: ICU locale cannot be specified unless locale provider is ICU $ createdb --encoding sql-ascii --icu-locale en-US --locale-provider icu hoge createdb: error: database creation failed: ERROR: encoding "SQL_ASCII" is not supported with ICU provider 2. For builds without ICU: 2.1. $ initdb --locale-provider icu hoge ... initdb: error: ICU locale must be specified $ initdb --locale-provider icu --icu-locale en-US hoge ... initdb: error: ICU is not supported in this build $ createdb --locale-provider icu hoge createdb: error: database creation failed: ERROR: ICU locale must be specified $ createdb --locale-provider icu --icu-locale en-US hoge createdb: error: database creation failed: ERROR: ICU is not supported in this build IMO, it would be more user-friendly to inform an unsupported build in the first runs too.. 2.2. (ok?) $ initdb --icu-locale en-US hoge initdb: error: --icu-locale cannot be specified unless locale provider "icu" is chosen $ initdb --icu-locale en-US --locale-provider icu hoge ... initdb: error: ICU is not supported in this build $ createdb --icu-locale en-US hoge createdb: error: database creation failed: ERROR: ICU locale cannot be specified unless locale provider is ICU $ createdb --icu-locale en-US --locale-provider icu hoge createdb: error: database creation failed: ERROR: ICU is not supported in this build 2.3. $ createdb --locale-provider icu --icu-locale en-US --encoding sql-ascii hoge createdb: error: database creation failed: ERROR: encoding "SQL_ASCII" is not supported with ICU provider $ createdb --locale-provider icu --icu-locale en-US --encoding utf8 hoge createdb: error: database creation failed: ERROR: ICU is not supported in this build IMO, it would be more user-friendly to inform an unsupported build in the first run too.. 3. The locale provider is ICU, but it has not yet been set from the template database: > $ initdb --locale-provider icu --icu-locale en-US -D data && > pg_ctl -D data -l logfile start && > createdb --icu-locale ru-RU --template template0 mydb > ... > createdb: error: database creation failed: ERROR: ICU locale cannot be > specified unless locale provider is ICU -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company