OK, de mes perusings, il semble que ce réglage initial
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.
spécifie essentiellement les paramètres régionaux "par défaut" pour toute base de données que vous créez après (à savoir il spécifie les paramètres de template1, qui est le modèle par défaut). Vous pouvez créer de nouvelles bases de données avec un autre lieu comme celui-ci:
Locale est différent de l'encodage, vous pouvez manuellement specify et/ou le codage:
CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;
Si vous voulez appeler manuellement sortir. Fondamentalement, si vous ne le spécifiez pas, il utilise la valeur par défaut du système, qui n'est presque jamais "C".
Donc, si votre show LC_COLLATE
renvoie autre chose que "C" ou "POSIX" alors vous n'utilisez pas le standard C locale
et vous devrez spécifier le xxx_pattern_ops pour vos index. Notez également le caveat que si vous souhaitez utiliser les opérateurs <, < =,>, ou> =, vous devez créer un second index sans l'indicateur xxx_pattern_ops (sauf si vous utilisez les paramètres régionaux C standard sur votre base de données, ce qui est rare. ..). Pour seulement == et LIKE
(etc.) alors vous n'avez pas besoin d'un second index. Si vous n'avez pas besoin de LIKE
alors vous n'avez pas besoin de l'index avec xxx_pattern_ops, peut-être aussi.
Même si vos index sont définis pour collationner avec le « default » comme
CREATE INDEX my_index_name
ON table_name
USING btree
(identifier COLLATE pg_catalog."default");
Cela ne suffit pas, à moins que la valeur par défaut est la collation « C » (ou Posix, la même chose), il peut » t être utilisé pour des motifs comme LIKE 'ABC%'
. Vous avez besoin de quelque chose comme ceci:
CREATE INDEX my_index_name
ON table_name
USING btree
(identifier COLLATE pg_catalog."default" varchar_pattern_ops);
Donc, si je comprends bien la documentation SHOW correctement, la valeur LC_COLLATE de mon serveur de « en_US.UTF-8 » signifie qu'il est de ne pas utiliser les paramètres régionaux « C », auquel cas Je dois m'assurer d'utiliser xxx_pattern_ops. Est-ce correct? –
Vous devez créer ces index uniquement si les critères s'appliquent (correspondance de modèle sur les colonnes). Voir mes modifications. –
LC_COLLATE: [Actuellement, ce paramètre peut être affiché mais pas défini, car le paramètre est déterminé lors de la création de la base de données.] (Http://www.postgresql.org/docs/9.2/static/sql-show.html) –