Come forzare Windows a supportare LC_COLLATE e LC_TYPE non supportati in PostgreSQL?


8

Ho una nuova installazione di PostgreSQL 9.1.x. Sfortunatamente, ho scoperto che il sistema operativo non supporta LC_COLLATE = 'pl_PL.utf8'e LC_CTYPE = 'pl_PL.utf8'. Ho letto nella documentazione di PostgreSQL che:

Su tutte le piattaforme sono disponibili le regole di confronto denominate default, C e POSIX. Ulteriori regole di confronto potrebbero essere disponibili in base al supporto del sistema operativo.

È un modo, tuttavia, per forzare Windows a supportare quella locale? Intendo una patch, un plugin o qualcosa del genere.

Risposte:


7

Su Windows, è probabile che le impostazioni internazionali necessarie siano già installate, che abbiano semplicemente un nome diverso rispetto a Unix.

Ad esempio, la seguente creazione del database sembra funzionare bene con PG9.1 sul mio Windows XP, con le impostazioni internazionali predefinite French_France.1252e nessun language pack aggiuntivo che ricorderò.

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

Inoltre, un rapido test dell'ordinamento inviando questa query in UTF8 in questo database appena creato:

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

sembra produrre risultati corretti:

s
ś
x
y
z
ź
ż


Hmmm ... forse hai ragione ...
marioosh il

1

Per quanto ne so, non è possibile forzare la versione di PostgreSQL per Windows a supportare impostazioni locali e regole di confronto non offerte da Windows. PostgreSQL utilizza le impostazioni locali del sistema e il supporto delle regole di confronto. Se il sistema non lo supporta, non è possibile utilizzarlo. Questa è una limitazione frustrante a volte, ma come è. È necessario scegliere una codifica e regole di confronto adatte supportate dall'installazione di Windows.

Se si desidera alias un nome di confronto del sistema operativo e chiamarlo, pl_PL.utf8è possibile farlo con CREATE COLLATION.

Vedere Supporto set di caratteri , Supporto regole di confronto e la tabella del catalogo pg_collation .

Qual è il problema che stai cercando di risolvere con questo?


Di "No." Vuoi dire che non c'è modo di supportarlo su Windows? Forse posso installare qualcosa per farlo funzionare. Ne ho bisogno LC_COLLATE, LC_CTYPEsono impostati su un 'pl_PL.utf8'ordinamento valido.

@marioosh Devi scoprire qual è la locale Windows equivalente con le regole di confronto che ti servono. Dal mio punto di vista questo è un po 'una verruca; Vorrei davvero che Pg fornisse almeno il supporto opzionale di confronto / codifica interno, piuttosto che dover fare sempre affidamento sul supporto del sistema operativo. Risposta aggiornata con un collegamento di documenti.
Craig Ringer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.