Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

42P12 1С:Предприятие и СУБД

Ошибка 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 в операционной системе.

Полезные материалы
Рекомендуем