Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка PostgreSQL 42P12: invalid_database_definition — создание баз

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Ошибка ERROR: invalid database definition: ... (SQLSTATE 42P12) при попытке создания базы данных.
  • Несовместимость выбранной кодировки (ENCODING) и правил сортировки (LC_COLLATE / LC_CTYPE).
  • Отказ создания информационной базы 1С через консоль администрирования кластера серверов.

1. Проверка системных локалей операционной системы

Убедитесь, что требуемая локаль установлена и сгенерирована в Linux:

locale -a | grep -Ei "ru_RU|en_US"

# Если локаль отсутствует, сгенерируйте ее (Ubuntu/Debian):
sudo locale-gen ru_RU.UTF-8
sudo update-locale

# Для RHEL/Rocky Linux:
sudo dnf install -y glibc-langpack-ru

2. Корректное создание базы данных для 1С:Предприятие

Создавайте базу с явным совпадением кодировки UTF-8 и локали:

CREATE DATABASE ib_trade_db
    WITH 
    OWNER = usr1cv8
    ENCODING = 'UTF8'
    LC_COLLATE = 'ru_RU.UTF-8'
    LC_CTYPE = 'ru_RU.UTF-8'
    TEMPLATE = template0
    CONNECTION LIMIT = -1;

3. Исправление несовместимости кодировок шаблона template1

Если шаблонная база `template1` была создана в `SQL_ASCII` или `LATIN1`, создание баз с `UTF-8` вызовет ошибку. Используйте `TEMPLATE = template0` (чистый системный шаблон).

Практический опыт инженера: Всегда указывайте TEMPLATE = template0 при ручном создании баз под 1С через скрипты автоматизации. Это гарантирует, что база создается без посторонних расширений и мусорных объектов из template1.

Частые вопросы (FAQ)

Почему 1С требует обязательного использования локали ru_RU.UTF-8?

Платформа 1С полагается на корректное лексикографическое упорядочивание кириллических строк, регистронезависимое сравнение и правильную работу полнотекстового поиска.

Можно ли изменить кодировку существующей базы данных?

Нет. Кодировка (ENCODING) и правила сортировки (COLLATE) задаются при создании. Для изменения требуется создать новую базу и выполнить выгрузку/загрузку через pg_dump / pg_restore или DT-файл 1С.

Что делать, если возникает ошибка: template database is being accessed by other users?

Завершите все активные подключения к шаблону: SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'template1';

Какую стратегию локализации выбрать в PostgreSQL 16+: libc или icu?

Для современных баз 1С рекомендуется использовать провайдер ICU (LOCALE_PROVIDER = 'icu'), так как он гарантирует независимость правил сортировки от обновлений glibc в операционной системе.