Re: initdb initalization failure for collation "ja_JP"
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: Marco Atzeri <marco.atzeri@gmail.com>,
PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2017-06-23T22:20:20Z
Lists: pgsql-hackers
Attachments
- collation-lookup-fix.patch (text/x-diff) patch
I wrote: >> One question that I've got is why the ICU portion refuses to load >> any entries unless is_encoding_supported_by_icu(GetDatabaseEncoding()). >> Surely this is completely wrong? I should think that what we load into >> pg_collation ought to be independent of template1's encoding, the same >> as it is for libc collations, and the right place to be making a test >> like that is where somebody attempts to use an ICU collation. Pursuant to the second part of that: I checked on what happens if you try to use an ICU collation in a database with a not-supported-by-ICU encoding. We have to cope with that scenario even with the current (broken IMO) initdb behavior, because even if template1 has a supported encoding, it's possible to create another database that doesn't. It does fail more or less cleanly; you get an "encoding "foo" not supported by ICU" message at runtime (out of get_encoding_name_for_icu). But that's quite a bit unlike the behavior for libc collations: with those, you get an error in collation name lookup, along the lines of collation "en_DK.utf8" for encoding "SQL_ASCII" does not exist The attached proposed patch makes the behavior for ICU collations the same, by dint of injecting the is_encoding_supported_by_icu() check into collation name lookup. regards, tom lane
Commits
-
Further hacking on ICU collation creation and usage.
- ddb5fdc06863 10.0 landed
-
Rethink behavior of pg_import_system_collations().
- 0b13b2a7712b 10.0 landed