Bagaimana memaksa Windows untuk mendukung LC_COLLATE dan LC_TYPE yang tidak didukung di PostgreSQL?

8

Saya memiliki instalasi baru PostgreSQL 9.1.x. Sayangnya, saya menemukan bahwa OS tidak mendukung LC_COLLATE = 'pl_PL.utf8'dan LC_CTYPE = 'pl_PL.utf8'. Saya membaca dalam dokumentasi PostgreSQL bahwa:

Di semua platform, kumpulan yang bernama default, C, dan POSIX tersedia. Koleksi tambahan mungkin tersedia tergantung pada dukungan sistem operasi.

Apakah ada cara, namun untuk memaksa Windows untuk mendukung lokal itu? Maksud saya patch, plugin atau sesuatu.

marioosh
sumber

Jawaban:

7

Pada Windows, kemungkinan lokal yang diperlukan sudah diinstal, hanya saja namanya berbeda dari pada Unix.

Sebagai contoh, pembuatan basis data berikut ini tampaknya berfungsi baik untuk saya dengan PG9.1 pada Windows XP saya, dengan lokal default French_France.1252dan tidak ada paket bahasa tambahan yang diinstal yang saya ingat.

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

Selain itu, tes cepat untuk pengurutan dengan mengirimkan kueri ini di UTF8 dalam database yang baru dibuat ini:

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

tampaknya menampilkan hasil yang benar:

s
ś
x
y
z
ź
ż

Daniel Vérité
sumber
Hmmm ... mungkin Anda benar ...
marioosh
1

Sejauh yang saya tahu, Anda tidak dapat memaksa versi Windows PostgreSQL untuk mendukung lokal dan koleksi yang tidak ditawarkan oleh Windows. PostgreSQL menggunakan sistem lokal dan dukungan pemeriksaan. Jika sistem tidak mendukungnya, Anda tidak dapat menggunakannya. Kadang-kadang ini adalah batasan yang membuat frustrasi, tetapi bagaimana itu. Anda harus memilih penyandian dan susunan yang sesuai yang didukung oleh pemasangan Windows Anda.

Jika Anda ingin alias nama OS collation dan menyebutnya, pl_PL.utf8Anda mungkin dapat melakukannya dengan CREATE COLLATION.

Lihat Dukungan set karakter , Dukungan Collation dan tabel katalog pg_collation .

Apa masalah yang Anda coba selesaikan dengan ini?

Craig Ringer
sumber
Dengan "Tidak." Maksud Anda tidak ada cara untuk mendukung ini di Windows? Mungkin saya dapat menginstal sesuatu untuk membuatnya berfungsi. Saya perlu itu LC_COLLATE, LC_CTYPEdiatur ke 'pl_PL.utf8'penyortiran yang valid.
@marioosh Anda perlu mencari tahu apa yang setara dengan Windows locale dengan aturan collation yang Anda butuhkan. Dalam pandangan saya ini sedikit kutil; Saya benar-benar berharap Pg akan menyediakan setidaknya dukungan collation / encoding internal opsional, daripada harus selalu bergantung pada dukungan OS. Jawaban diperbarui dengan tautan dokumen.
Craig Ringer