У меня на сервере установлено два экземпляра PostgreSQL: 8.3 и 9.0. Возможно, возникнут проблемы с польскими диакритическими символами (например, ółęąśżźć) в клиенте postgresql 9.0 - psql.
Когда я подключаюсь к БД (8.3 или 9.0) с помощью psql 8.3 - я могу без проблем вводить все диакритические знаки на терминале:
www:/tmp# sudo -u postgres /usr/lib/postgresql/8.3/bin/psql -q
postgres=# ółśćń
Однако, когда я подключаюсь к тем же БД с клиентом psql 9.0 - я больше не могу вводить диакритические знаки на терминале:
www:/tmp# sudo -u postgres /usr/lib/postgresql/8.3/bin/psql -q
Вот некоторые настройки кодировки:
www:/tmp# sudo -u postgres /usr/lib/postgresql/9.0/bin/psql -q -c "show client_encoding"
client_encoding
-----------------
UTF8
(1 row)
.
www:/tmp# sudo -u postgres /usr/lib/postgresql/8.3/bin/psql -q -c "show client_encoding"
client_encoding
-----------------
UTF8
(1 row)
.
www:/tmp# sudo -u postgres /usr/lib/postgresql/9.0/bin/psql -q -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
---------------------+--------------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | pl_PL.UTF-8 | pl_PL.UTF-8 |
.
www:/tmp# echo $LANG
pl_PL.UTF-8
Похоже, что конфигурация БД / кластера не имеет значения - если psql 8.x на терминале работает нормально, а psql 9.x - нет. Есть идеи, как это исправить?
Вероятно, это связано с переключением psql 9.0.2 с readline на libedit. Вы можете попробовать (у меня работает, Ubuntu 10.04):
rlwrap psql -n ...
Альтернативно:
LD_PRELOAD='/lib/libreadline.so.5' psql ...
Или предлагается установить termcap, но я этого не пробовал (нет очевидного способа сделать это в Ubuntu).