Смена локалей для PostgreSQL#

Руководство, как сменить локаль БД PostgreSQL.

Проверка локализации в данный момент#

  • Выполнить SQL-запрос:

SELECT name, setting FROM pg_settings WHERE name LIKE 'lc_%';
  • Пример английской локализации:

    Английская локализация

  • Пример русской локализации:

    Русская локализация

  • Через psql:

    psql
    
    \l
    
    • Английская локализация:

      Английская локализация

    • Русская локализация:

      Русская локализация

Добавление локализации#

Отредактируйте файл /etc/locale.gen, найдите и раскомментируйте строку ru_RU.UTF-8

Выполните команду:

sudo locale-gen

Смена локализации в конфиге postgresql#

Отредактируйте файл /etc/postgresql/<version_number>/main/postgresql.conf

sudo nano /etc/postgresql/<version_number>/main/postgresql.conf

Найдите указанные строки, они должны быть с такими значениями:

lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'

Пересоздание кластера базы данных#

Примечание

Если вам нужно сохранить ваши данные, то перед выполнением, снимите дамп с вашей БД.

Для смены локализации требуется пересоздать кластер базы данных с нужной локалью.

  • Остановите PostgreSQL:

    sudo systemctl stop postgresql
    
  • Переинициализируйте кластер:

    sudo pg_dropcluster <версия> main --stop  
    sudo pg_createcluster <версия> main --locale=ru_RU.UTF-8 --start
    
  • Запустите PostgreSQL:

    sudo systemctl start postgresql
    

Если вам нужно изменить локализацию без пересоздания кластера (например, для одной базы данных), можно создать новую базу с заданной локалью:

CREATE DATABASE mydb WITH TEMPLATE = template0 LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' ENCODING = 'UTF8';