¿Cómo obligar a Windows a admitir LC_COLLATE y LC_TYPE no compatibles en PostgreSQL?

8

Tengo una nueva instalación de PostgreSQL 9.1.x. Desafortunadamente, descubrí que el sistema operativo no es compatible LC_COLLATE = 'pl_PL.utf8'y LC_CTYPE = 'pl_PL.utf8'. Leí en la documentación de PostgreSQL que:

En todas las plataformas, las colaciones denominadas default, C y POSIX están disponibles. Pueden estar disponibles intercalaciones adicionales dependiendo del soporte del sistema operativo.

¿Es una forma, sin embargo, de obligar a Windows a admitir esa configuración regional? Me refiero a un parche, complemento o algo así.

marioosh
fuente

Respuestas:

7

En Windows, es probable que la configuración regional necesaria ya esté instalada, simplemente se llama de manera diferente que en Unix.

Como ejemplo, la siguiente creación de base de datos parece funcionar bien para mí con PG9.1 en mi Windows XP, con su configuración regional predeterminada French_France.1252y ningún paquete de idioma adicional instalado que yo recuerde.

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

Además, una prueba rápida del orden de clasificación enviando esta consulta en UTF8 en esta base de datos recién creada:

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

parece dar resultados correctos:

s
ś
x
y
z
ź
ż

Daniel Vérité
fuente
Hmmm ... tal vez
tengas
1

Hasta donde yo sé, no puede forzar la versión de Windows de PostgreSQL para que admita configuraciones regionales y colaciones no ofrecidas por Windows. PostgreSQL utiliza la configuración regional del sistema y el soporte de intercalación. Si el sistema no lo admite, no puede usarlo. Esta es una limitación frustrante a veces, pero cómo es. Debe elegir una codificación y una clasificación adecuadas compatibles con su instalación de Windows.

Si desea alias un nombre de intercalación del sistema operativo y llamarlo, pl_PL.utf8puede hacerlo con CREATE COLLATION.

Consulte Soporte de juego de caracteres , Soporte de clasificación y la tabla de catálogo pg_collation .

¿Cuál es el problema que estás tratando de resolver con esto?

Craig Ringer
fuente
Por "No." ¿Quieres decir que no hay forma de soportar esto en Windows? Tal vez pueda instalar algo para que funcione. Necesito eso LC_COLLATE, LC_CTYPEestán configurados 'pl_PL.utf8'para una clasificación válida.
@marioosh Necesita saber cuál es la configuración regional equivalente de Windows con las reglas de clasificación que necesita. En mi opinión, esto es un poco una verruga; Realmente deseo que Pg proporcione al menos soporte interno opcional de colación / codificación, en lugar de tener que confiar siempre en el soporte del sistema operativo. Respuesta actualizada con un enlace de documentación.
Craig Ringer