пятница, 13 мая 2016 г.

Записки о локализации


Кодировка символов


  1. На сервере. Убедиться (psql: \l) что кодировка базы данных поддерживает кириллицу (одна из списка)
  2. На клиенте. Убедиться что установленная кодировка на клиенте поддерживает кириллицу.
    Зависит от ОС.
    Примечание. В Windows, чтобы для cmd.exe установить кодировку 1251:
    • c:\> 'chcp 1251' выбрать шрифты Lucida Console
    • выбрать шрифты Lucida Console
  3. На клиенте. Установить параметр client_encoding в соответствии с кодировкой клиента.
    Например, SET client_encoding TO 'WIN1251';
    Примечание. psql устанавливает client_encoding в кодировку клиента автоматически при подключении к БД (запуск или \connect). Проверить текущее значение и/или установить новое: команда \encoding

Язык сообщений сервера

  • Выбор языка сообщений возможен, если при сборке сервера PostgreSQL использовалась опция --enable_nls.
    Проверить: pg_config --configure
    В директории pg_config--localedir должны быть подкаталоги для каждого установленного языка
  • Кодировка символов для сообщений сервера определяется параметром client_encoding
  • Установить требуемый язык сообщений сервера в параметре lc_messages.
    Например, SET lc_messages TO 'ru_RU.UTF8';
    Примечание. Если в сессии, которая стартовала сервер (pg_ctl start), была установлена переменная окружения LANGUAGE, то именно это значение будет использоваться для языка сообщений сервера. Значение параметра LC_MESSAGES не будет использоваться.
    Примечание. При подключении к серверу могут возникать ошибки (например, указан неправильный пароль). В этот момент сервер еще не знает кодировку клиента (параметр client_encoding еще не установлен), поэтому будет отправлять сообщение об ошибке в кодировке сервера. Если клиент использует другую кодировку и установлен язык сообщений сервера отличный от en (например, ru), то клиент получит сообщение в неверной кодировке.
    Примечание. Сообщения сервера отправляются не только клиенту, но и в журнал сервера. При установке русского языка для сообщений сервера нужно убедиться, что утилиты для обработки журнала (если используются) понимают кириллицу.

Язык сообщений утилит PostgreSQL (psql, pg_dump, pg_ctl)

  • Выбор языка сообщений возможен, если при сборке утилит PostgreSQL использовалась опция --enable_nls.
    Проверить: pg_config --configure
    В директории pg_config--localedir должны быть подкаталоги для каждого установленного языка

    Примечание. В общем случае, утилиты PostgreSQL можно использовать для подключения к другому серверу PostgreSQL, например удаленному.
  • Язык сообщений утилит PostgreSQL определяется настройками ОС.
    Например, в linux/unix (и в Windows) это переменные окружения (в порядке предпочтения): LANGUAGE, LC_ALL, LC_MESSAGES, LANG
    Примечание. psql выводит как свои собственные сообщения (например, при запуске), так и сообщения сервера. Поскольку язык для этих двух видов сообщений настраивается в разных местах (параметр lc_messages для сообщений сервера и переменные ОС для сообщений psql), то и выводится они могут на разных языках.

Установка параметров в строке соединения


В строке соединения можно указать параметры конфигурации, которые нужно установить после подключения.

psql postgresql://postgres@localhost:5432/postgres?options="-c work_mem%3D32MB -c maintenance_work_mem%3D512MB"

Тоже самое можно сделать установив переменную окружения PGOPTIONS:

export PGOPTIONS='-c work_mem=32MB -c maintenance_work_mem=512MB'
psql -c "show maintenance_work_mem;"
 maintenance_work_mem
----------------------
 512MB


Может быть полезным, когда код приложения изменить нельзя и не подходит функциональность ALTER DATABASE SET или ALTER ROLE SET.


Ссылки:
Connection strings
Percent-encoding in a URI