mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Fix lc_collate_is_c() when LC_COLLATE != LC_CTYPE.
An unfortunate typo in commit 2d819a08a1
can cause wrong results when
the default collation provider is libc, LC_CTYPE=C, and LC_COLLATE is
a real locale. Users with this combination of settings must REINDEX
all affected indexes.
The same typo can also cause performance degradation when LC_COLLATE=C
and LC_CTYPE is a real locale.
Problem does not exist in master (due to refactoring), so fix only in
version 17.
Reported-by: Drew Callahan
Discussion: https://postgr.es/m/d5081a7f4f6d425c28dd69d1e09b2e78f149e726.camel@j-davis.com
This commit is contained in:
@ -1370,9 +1370,9 @@ lc_collate_is_c(Oid collation)
|
|||||||
}
|
}
|
||||||
else if (default_locale.provider == COLLPROVIDER_LIBC)
|
else if (default_locale.provider == COLLPROVIDER_LIBC)
|
||||||
{
|
{
|
||||||
localeptr = setlocale(LC_CTYPE, NULL);
|
localeptr = setlocale(LC_COLLATE, NULL);
|
||||||
if (!localeptr)
|
if (!localeptr)
|
||||||
elog(ERROR, "invalid LC_CTYPE setting");
|
elog(ERROR, "invalid LC_COLLATE setting");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
elog(ERROR, "unexpected collation provider '%c'",
|
elog(ERROR, "unexpected collation provider '%c'",
|
||||||
|
Reference in New Issue
Block a user