2012-03-09 40 views
6

Tôi đã gặp sự cố lạ trên một trong các máy của chúng tôi.Bàn điều khiển psql không chấp nhận nội địa hóa

Đây là bản cài đặt Debian Squeeze mới, với Postgres 8.4.10.

Tôi có một vài tin cục bộ được cài đặt trên máy tính này, locale -a cho này:

C 
en_US 
en_US.iso88591 
en_US.utf8 
POSIX 
swedish 
sv_SE 
sv_SE.iso88591 
sv_SE.utf8 

Trong giao diện điều khiển Linux thường xuyên Tôi có thể sử dụng nội địa hóa swedish (AAO hoạt động), nhưng khi tôi nhập psql console tôi không thể sử dụng các ký tự được bản địa hóa. Không quan trọng như thế nào tôi cấu hình thiết bị đầu cuối của tôi (cố gắng chỉ là về mọi mã hóa tôi có thể nghĩ đến).

Cơ sở dữ liệu hoạt động tốt, tôi có thể nhập các ký tự được bản địa hóa bằng cách tạo một tệp SQL và giữ chèn ở đó. Nó không phải là cách hiệu quả nhất để làm điều đó ;-)

Chưa từng gặp vấn đề này trước đây, và tôi đã cài đặt một vài máy. Có ai có bất kỳ ý tưởng về những gì có thể có thể là nguyên nhân của điều này?

Trả lời

7

Tôi tin rằng bạn' đang gặp sự cố được giải thích trong báo cáo lỗi này: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=608442

Tóm tắt: do giấy phép ing vấn đề, psql bây giờ được liên kết với libedit thay vì libreadline, và tiếc là libedit bị hỏng/không đầy đủ đối với các ký tự có dấu. Theo báo cáo, một công việc xung quanh là để khởi động psql với:

LD_PRELOAD=/lib/libreadline.so.5 psql 

hoặc nâng cấp postgresql-chung gói lên phiên bản 114 hoặc cao hơn. Vì nó không nằm trong nhánh ổn định, cách dễ nhất có thể là chuyển sang backports:

# aptitude -t squeeze-backports install postgresql-common 
0

Kiểm tra mã hóa cơ sở dữ liệu với \l sau đó kiểm tra mã hóa client:

=> show client_encoding; 
client_encoding 
----------------- 
UTF8 
(1 row) 

Nếu họ không phù hợp sau đó thay đổi mã khách hàng để có cơ sở dữ liệu:

set client_encoding=iso88591; 
Các vấn đề liên quan