Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdb2760a

Browse files
committed
Disallow creating an ICU collation if the DB encoding won't support it.
Previously this was allowed, but the collation effectively vanishedinto the ether because of the way lookup_collation() works: you couldnot use the collation, nor even drop it. Seems better to give anerror up front than to leave the user wondering why it doesn't work.(Because this test is in DefineCollation not CreateCollation, it doesnot prevent pg_import_system_collations from creating ICU collations,regardless of the initially-chosen encoding.)Per bug #17170 from Andrew Bille. Back-patch to v10 where ICU supportwas added.Discussion:https://postgr.es/m/17170-95845cf3f0a9c36d@postgresql.org
1 parent0c6a6a0 commitdb2760a

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

‎src/backend/commands/collationcmds.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,26 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e
215215
if (!fromEl)
216216
{
217217
if (collprovider==COLLPROVIDER_ICU)
218+
{
219+
#ifdefUSE_ICU
220+
/*
221+
* We could create ICU collations with collencoding == database
222+
* encoding, but it seems better to use -1 so that it matches the
223+
* way initdb would create ICU collations. However, only allow
224+
* one to be created when the current database's encoding is
225+
* supported. Otherwise the collation is useless, plus we get
226+
* surprising behaviors like not being able to drop the collation.
227+
*
228+
* Skip this test when !USE_ICU, because the error we want to
229+
* throw for that isn't thrown till later.
230+
*/
231+
if (!is_encoding_supported_by_icu(GetDatabaseEncoding()))
232+
ereport(ERROR,
233+
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
234+
errmsg("current database's encoding is not supported with this provider")));
235+
#endif
218236
collencoding=-1;
237+
}
219238
else
220239
{
221240
collencoding=GetDatabaseEncoding();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp