ОК, из моих perusings, оказывается, что установка этого начального
initdb --locale=xxx
--locale=locale
Specifies the locale to be used in this database. This is equivalent to specifying both --lc-collate and --lc-ctype.
в основном определяет «по умолчанию» локали для всех баз данных, которые вы создаете после этого (т.е. он задает параметры для шаблона1, который является шаблоном по умолчанию). Вы можете создавать новые базы данных с другим языком, как это:
Locale отличается от кодирования, вы можете вручную specify его и/или кодирование:
CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;
Если вы хотите, чтобы вручную вызвать его.
В принципе, если вы не указали его, он использует системный стандарт, который почти никогда не является «C».
Итак, если ваш show LC_COLLATE
возвращает что-либо, кроме «C» или «POSIX», то вы не используете standard C locale
, и вам нужно будет указать xxx_pattern_ops для ваших индексов. Обратите также внимание на то, что если вы хотите использовать операторы <, < =,> или> =, вам нужно создать второй индекс без флага xxx_pattern_ops (если вы не используете стандартную локаль C в своей базе данных, что редко. ..). Для просто == и LIKE
(и т. Д.) Вам не нужен второй индекс. Если вам не нужен LIKE
, вам не нужен индекс с xxx_pattern_ops, возможно, также.
Даже если ваши показатели определяются для сопоставления с «по умолчанию», как
CREATE INDEX my_index_name
ON table_name
USING btree
(identifier COLLATE pg_catalog."default");
Это не достаточно, если значение по умолчанию является «C» (или POSIX, то же самым) сверкой, она может» t для таких моделей, как LIKE 'ABC%'
. Вам нужно что-то вроде этого:
CREATE INDEX my_index_name
ON table_name
USING btree
(identifier COLLATE pg_catalog."default" varchar_pattern_ops);
Так что, если я понимание документации SHOW правильно, то LC_COLLATE значение моего сервера из «en_US.UTF-8» означает, что он не использует «C» локали, в этом случае Мне нужно убедиться, что вы используете xxx_pattern_ops. Это правильно? –
Вам необходимо создать такие индексы только в том случае, если применяются критерии (сопоставление образцов по столбцам). Смотрите мои правки. –
LC_COLLATE: [В настоящее время этот параметр может быть показан, но не установлен, поскольку параметр определяется во время создания базы данных.] (Http://www.postgresql.org/docs/9.2/static/sql-show.html) – 2014-03-08 19:08:22