Назад | Перейти на главную страницу

Проблема с диакритическими знаками в psql 9.0 (PostgreSQL)

У меня на сервере установлено два экземпляра 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).