aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r--src/backend/utils/adt/varlena.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 71d47380ac6..5c6afbbd07b 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -1744,14 +1744,22 @@ static void
btsortsupport_worker(SortSupport ssup, Oid collid)
{
TextSortSupport *tss;
+ bool abbreviate = ssup->abbreviate;
/*
* WIN32 requires complex hacks when the database encoding is UTF-8 (except
* when using the "C" collation). For now, we don't optimize that case.
+ * The use of abbreviated keys is also disabled on Windows, because
+ * strxfrm() doesn't appear to work properly on some Windows systems.
+ * Ideally, we would use it on those systems where it's reliable and
+ * skip it only for the rest, but at the moment we don't know how to
+ * distinguish between the ones where it works and the ones where it
+ * doesn't.
*/
#ifdef WIN32
if (GetDatabaseEncoding() == PG_UTF8 && !lc_collate_is_c(collid))
return;
+ abbreviate = false;
#endif
/*
@@ -1838,7 +1846,7 @@ btsortsupport_worker(SortSupport ssup, Oid collid)
else
ssup->abbrev_full_comparator = ssup->comparator = bttextfastcmp_locale;
- if (!lc_collate_is_c(collid) || ssup->abbreviate)
+ if (!lc_collate_is_c(collid) || abbreviate)
{
/*
* Abbreviated case requires temp buffers for strxfrm() copying.
@@ -1852,7 +1860,7 @@ btsortsupport_worker(SortSupport ssup, Oid collid)
ssup->ssup_extra = tss;
}
- if (!ssup->abbreviate)
+ if (!abbreviate)
return;
initHyperLogLog(&tss->abbr_card, 10);