Wie kann Windows gezwungen werden, nicht unterstützte LC_COLLATE und LC_TYPE in PostgreSQL zu unterstützen?

8

Ich habe eine Neuinstallation von PostgreSQL 9.1.x. Leider entdeckte ich , dass OS nicht unterstützt LC_COLLATE = 'pl_PL.utf8'und LC_CTYPE = 'pl_PL.utf8'. Ich habe in der PostgreSQL-Dokumentation gelesen, dass:

Auf allen Plattformen sind die Sortierungen mit den Namen default, C und POSIX verfügbar. Abhängig von der Betriebssystemunterstützung sind möglicherweise zusätzliche Sortierungen verfügbar.

Ist es jedoch eine Möglichkeit, Windows zu zwingen, dieses Gebietsschema zu unterstützen? Ich meine einen Patch, ein Plugin oder so.

Marioosh
quelle

Antworten:

7

Unter Windows ist das erforderliche Gebietsschema wahrscheinlich bereits installiert. Es wird nur anders benannt als unter Unix.

Als Beispiel scheint die folgende Datenbankerstellung für mich mit PG9.1 unter Windows XP mit dem Standardgebietsschema French_France.1252und ohne installiertes zusätzliches Sprachpaket, an das ich mich erinnern würde, gut zu funktionieren .

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

Ein kurzer Test der Sortierreihenfolge durch Senden dieser Abfrage in UTF8 in dieser neu erstellten Datenbank:

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

scheint korrekte Ergebnisse auszugeben:

s
ś
x
y
z
ź
ż

Daniel Vérité
quelle
Hmmm ... vielleicht hast du recht ...
Marioosh
1

Soweit ich weiß, können Sie die Windows-Version von PostgreSQL nicht zwingen, Gebietsschemas und Kollatierungen zu unterstützen, die nicht von Windows angeboten werden. PostgreSQL verwendet die Unterstützung für das Gebietsschema und die Sortierung des Systems. Wenn das System dies nicht unterstützt, können Sie es nicht verwenden. Dies ist manchmal eine frustrierende Einschränkung, aber wie es ist. Sie müssen eine geeignete Codierung und Sortierung auswählen, die von Ihrer Windows-Installation unterstützt wird.

Wenn Sie einen OS-Kollatierungsnamen aliasen und aufrufen möchten, können pl_PL.utf8Sie dies möglicherweise mit tun CREATE COLLATION.

Siehe Zeichensatz - Unterstützung , Sortierungs Unterstützung und die pg_collation Katalogtabelle.

Was ist das Problem, das Sie damit lösen wollen?

Craig Ringer
quelle
Mit "Nein" Sie meinen, dass dies unter Windows nicht unterstützt werden kann? Vielleicht kann ich etwas installieren, damit es funktioniert. Ich brauche das LC_COLLATE, LC_CTYPEwird auf 'pl_PL.utf8'der gültige Sortierung.
@marioosh Sie müssen herausfinden, welches Windows-Gebietsschema den Kollatierungsregeln entspricht, die Sie benötigen. Meiner Meinung nach ist dies eine Art Warze; Ich wünschte wirklich, Pg würde zumindest optionale Unterstützung für die interne Sortierung / Codierung bieten, anstatt sich immer auf die Unterstützung des Betriebssystems verlassen zu müssen. Die Antwort wurde mit einem Dokumentlink aktualisiert.
Craig Ringer