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.

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
ź
ż


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?


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.