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 1oQ8FH-0003r5-8L for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Aug 2022 14:17:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oQ8FG-0001af-0D for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Aug 2022 14:17:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oQ8FF-0001Zz-H8 for pgsql-hackers@lists.postgresql.org; Mon, 22 Aug 2022 14:17:37 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oQ8FA-0001Y6-TP for pgsql-hackers@postgresql.org; Mon, 22 Aug 2022 14:17:37 +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 1B30421C39BE; Mon, 22 Aug 2022 17:17:31 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1661177851; bh=Wu8zgxTnawaH4oyXjm19ug1HP6RnKTnhZNKsl/zDqm0=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=p24mBKRhMzMYkwetSbno4kpxwuAhRlNBAoP2NmOXbpsqvUrXv2LcUYTNWgfIGKtNu KSCaSkpi2UYppiBKQQMKggk+7YYrzVX1EtgMge6AKdnWiO99cmC9yAoPD3OYMF3hnX QUpI5Z7CawbZi4+7FxBiUmlX6Z3OlYZ02laPJmTU= MIME-Version: 1.0 Date: Mon, 22 Aug 2022 17:17:31 +0300 From: Marina Polyakova To: Peter Eisentraut Cc: pgsql-hackers@postgresql.org, Michael Paquier , Julien Rouhaud , Daniel Verite , pryzby@telsasoft.com Subject: Re: ICU for global collation In-Reply-To: <7d74b2d7-7fc6-f55b-3f77-c0e05569b64e@enterprisedb.com> References: <20220121135119.ywszwl4353v5dzh5@jrouhaud> <20220121161331.xn7fhtfg5j2ucilb@jrouhaud> <87e93704-b7f7-71f6-161d-8713e6334ed3@enterprisedb.com> <704405ed-f1fa-d2a7-b9f9-48a07fb45648@enterprisedb.com> <20220625151930.GH22452@telsasoft.com> <20220626035124.t36putp232nfl5im@jrouhaud> <54b7bd53-ae10-6258-21e6-b799f7480803@enterprisedb.com> <97f2c29e-24d9-3660-60cf-9138c0c47d90@enterprisedb.com> <20220628013205.GH19662@telsasoft.com> <7d74b2d7-7fc6-f55b-3f77-c0e05569b64e@enterprisedb.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <05d4cba9d1a981fa3ea7eed187fe482b@postgrespro.ru> X-Sender: m.polyakova@postgrespro.ru Organization: Postgres Professional Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2022-08-22 17:10, Peter Eisentraut wrote: > On 15.08.22 14:06, Marina Polyakova wrote: >> 1.1) It looks like there's a bug in the function get_db_infos >> (src/bin/pg_upgrade/info.c), where the version of the old cluster is >> always checked: >> >> if (GET_MAJOR_VERSION(old_cluster.major_version) < 1500) >>     snprintf(query + strlen(query), sizeof(query) - strlen(query), >>              "'c' AS datlocprovider, NULL AS daticulocale, "); >> else >>     snprintf(query + strlen(query), sizeof(query) - strlen(query), >>              "datlocprovider, daticulocale, "); >> >> With the simple patch >> >> diff --git a/src/bin/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c >> index >> df374ce4b362b4c6c87fc1fd0e476e5d6d353d9e..53ea348e211d3ac38334292bc16cb814bc13bb87 >> 100644 >> --- a/src/bin/pg_upgrade/info.c >> +++ b/src/bin/pg_upgrade/info.c >> @@ -319,7 +319,7 @@ get_db_infos(ClusterInfo *cluster) >> >>      snprintf(query, sizeof(query), >>               "SELECT d.oid, d.datname, d.encoding, d.datcollate, >> d.datctype, "); >> -    if (GET_MAJOR_VERSION(old_cluster.major_version) < 1500) >> +    if (GET_MAJOR_VERSION(cluster->major_version) < 1500) >>          snprintf(query + strlen(query), sizeof(query) - >> strlen(query), >>                   "'c' AS datlocprovider, NULL AS daticulocale, "); >>      else > > fixed > >> 1.2) It looks like the mentioned asserion in dbcommands.c conflicts >> with the following lines earlier: >> >> if (dbiculocale == NULL) >>     dbiculocale = src_iculocale; > > fixed > >> I'm wondering if this is not a fully-supported feature (because >> createdb creates an SQL command with LC_COLLATE and LC_CTYPE options >> instead of LOCALE option) or is it a bug in CREATE DATABASE?.. From >> src/backend/commands/dbcommands.c: >> >> if (dblocprovider == COLLPROVIDER_ICU && !dbiculocale) >> { >>     if (dlocale && dlocale->arg) >>         dbiculocale = defGetString(dlocale); >> } > > I think this piece of code was left over from some earlier attempts to > specify the libc locale and the icu locale with one option, which > never really worked well. The CREATE DATABASE man page does not > mention that LOCALE provides the default for ICU_LOCALE. Hence, I > think we should delete this. Thank you! -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company