Перейти к основному содержанию
`Ctrl`+`K`

# Смена локалей для 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';