Может ли кто-нибудь дать представление о поведении языковых и числовых типов в PostgreSQL? Мы работаем с итальянским языком. Это разделение запятой для десятичной части. Настройка в postgresql.conf
# These settings are initialized by initdb, but they can be changed. lc_messages = 'it_IT.UTF-8' # locale for system error message # strings lc_monetary = 'it_IT.UTF-8' # locale for monetary formatting lc_numeric = 'it_IT.UTF-8' # locale for number formatting lc_time = 'it_IT.UTF-8' # locale for time formatting
.. ничего не делает! Он ведет себя вполне подходящим образом с датами и так, НО, но числовой тип остается DOT, отделенным для десятичной части.
root@server:~# uname -a Linux server 2.6.32-36-generic-pae #79-Ubuntu SMP Tue Nov 8 23:25:26 UTC 2011 i686 GNU/Linux root@server:~# dpkg -l | grep postgresql ii postgresql-8.4 8.4.9-0ubuntu0.10.04 object-relational SQL database, version 8.4 ii postgresql-client 8.4.9-0ubuntu0.10.04 front-end programs for PostgreSQL (supported)
РЕДАКТИРОВАТЬ
Возникла проблема с реализацией локали в разных областях: db, серверный скрипт, os и клиентская сторона. Решил избежать форматирования локалей и использовать en_EN locale . Форматирование локали будет применяться только в момент вывода и так далее.
Я цитирую руководство :
lc_numeric (строка)
Устанавливает язык, используемый для форматирования чисел, например, с помощью семейства функций to_char.
Обеспокоена этими функциями форматирования этого типа . Вы должны иметь возможность воспроизвести следующее демо:
SHOW lc_numeric;
de_AT.UTF-8
SELECT to_number('13,4','999D99')
13,4
SELECT to_char(13.4,'FM999D99')
13,4
SET lc_numeric = 'C'; SELECT to_number('13,4','999D99')
134
SELECT to_char(13.4,'FM999D99')
13,4
RESET lc_numeric;
Шаблоны шаблонов в руководстве .
Формат чисел в выражениях SQL не изменяется с настройками локали. Это было бы безумием.
С другой стороны: вы знаете, что вам необходимо (по крайней мере) перезагрузить сервер после изменения postgresql.conf
.
pg_ctl reload