Comment forcer Windows à prendre en charge les LC_COLLATE et LC_TYPE non pris en charge dans PostgreSQL?

8

J'ai une nouvelle installation de PostgreSQL 9.1.x. Malheureusement, j'ai découvert que le système d'exploitation ne prend pas en charge LC_COLLATE = 'pl_PL.utf8'et LC_CTYPE = 'pl_PL.utf8'. J'ai lu dans la documentation PostgreSQL que:

Sur toutes les plateformes, les classements nommés par défaut, C et POSIX sont disponibles. Des classements supplémentaires peuvent être disponibles en fonction de la prise en charge du système d'exploitation.

Est-ce un moyen, cependant, de forcer Windows à prendre en charge ces paramètres régionaux? Je veux dire un patch, un plugin ou quelque chose.

marioosh
la source

Réponses:

7

Sous Windows, il est probable que les paramètres régionaux nécessaires soient déjà installés, ils sont simplement nommés différemment que sous Unix.

À titre d'exemple, la création de base de données suivante semble bien fonctionner pour moi avec PG9.1 sur mon Windows XP, avec ses paramètres régionaux par défaut French_France.1252et aucun module linguistique supplémentaire installé dont je me souvienne.

CREATE DATABASE pldb
       ENCODING = 'UTF8'
       LC_COLLATE = 'Polish'
       LC_CTYPE = 'Polish'
       TEMPLATE=template0;

En outre, un test rapide de l'ordre de tri en soumettant cette requête en UTF8 dans cette base de données nouvellement créée:

select * from (values ('z'), ('ź'), ('ż'), ('s'), ('ś'), ('x'), ('y')) as letters order by 1;

semble produire des résultats corrects:

s
ś
x
y
z
ź
ż

Daniel Vérité
la source
Hmmm ... peut-être que vous avez raison ...
marioosh
1

À ma connaissance, vous ne pouvez pas forcer la version Windows de PostgreSQL à prendre en charge les paramètres régionaux et les classements non proposés par Windows. PostgreSQL utilise les paramètres régionaux du système et la prise en charge du classement. Si le système ne le prend pas en charge, vous ne pouvez pas l'utiliser. C'est parfois une limitation frustrante, mais comment c'est. Vous devez choisir un encodage et un classement appropriés pris en charge par votre installation Windows.

Si vous voulez alias un nom de classement de système d'exploitation et l'appeler, pl_PL.utf8vous pourrez le faire avec CREATE COLLATION.

Voir Prise en charge des jeux de caractères , Prise en charge des classements et la table du catalogue pg_collation .

Quel est le problème que vous essayez de résoudre avec cela?

Craig Ringer
la source
Par "Non" Vous voulez dire que ce n'est pas possible de prendre cela en charge sous Windows? Peut-être que je peux installer quelque chose pour le faire fonctionner. J'ai besoin de cela LC_COLLATE, LC_CTYPEsont réglés 'pl_PL.utf8'sur un tri valide.
@marioosh Vous devez découvrir les paramètres régionaux Windows équivalents avec les règles de classement dont vous avez besoin. À mon avis, c'est un peu une verrue; Je souhaite vraiment que Pg fournisse au moins un support de collationnement / encodage interne optionnel, plutôt que de devoir toujours compter sur le support du système d'exploitation. Réponse mise à jour avec un lien vers la documentation.
Craig Ringer