Como forçar o Windows a suportar LC_COLLATE e LC_TYPE não suportados no PostgreSQL?

8

Eu tenho uma nova instalação do PostgreSQL 9.1.x. Infelizmente, descobri que o SO não suporta LC_COLLATE = 'pl_PL.utf8'e LC_CTYPE = 'pl_PL.utf8'. Eu li na documentação do PostgreSQL que:

Em todas as plataformas, os agrupamentos nomeados padrão, C e POSIX estão disponíveis. Agrupamentos adicionais podem estar disponíveis, dependendo do suporte do sistema operacional.

Existe uma maneira, no entanto, de forçar o Windows a oferecer suporte a esse local? Quero dizer um patch, plugin ou algo assim.

marioosh
fonte

Respostas:

7

No Windows, é provável que o código de idioma necessário já esteja instalado, apenas com um nome diferente do que no Unix.

Por exemplo, a criação de banco de dados a seguir parece funcionar bem para mim com o PG9.1 no meu Windows XP, com seu local padrão French_France.1252e nenhum pacote de idioma adicional instalado que eu me lembre.

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

Além disso, um teste rápido da ordem de classificação enviando esta consulta no UTF8 neste banco de dados recém-criado:

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

parece produzir resultados corretos:

s
ś
x
y
z
ź
ż

Daniel Vérité
fonte
Hmmm ... talvez você esteja certo ...
marioosh
1

Até onde eu sei, você não pode forçar a versão do PostgreSQL para Windows a suportar localidades e agrupamentos não oferecidos pelo Windows. O PostgreSQL usa o código de idioma do sistema e o suporte de agrupamento. Se o sistema não suportar, você não poderá usá-lo. Esta é uma limitação frustrante às vezes, mas como é. Você precisa escolher uma codificação e agrupamento adequados, suportados pela instalação do Windows.

Se você quiser criar um apelido para um nome de agrupamento do SO e chamá- pl_PL.utf8lo, poderá fazê-lo CREATE COLLATION.

Consulte Suporte ao conjunto de caracteres , Suporte ao agrupamento e a tabela do catálogo pg_collation .

Qual é o problema que você está tentando resolver com isso?

Craig Ringer
fonte
Por "Não". Você quer dizer que não há como apoiar isso no Windows? Talvez eu possa instalar algo para fazê-lo funcionar. Eu preciso disso LC_COLLATE, LC_CTYPEestá definido 'pl_PL.utf8'para uma classificação válida.
@ marioosh Você precisa descobrir qual é a localidade equivalente do Windows com as regras de ordenação necessárias. Na minha opinião, isso é meio que uma verruga; Eu realmente gostaria que a Pg fornecesse pelo menos suporte interno opcional de agrupamento / codificação, em vez de precisar sempre confiar no suporte do sistema operacional. Resposta atualizada com um link de documentos.
Craig Ringer