При создании информационной базы 1С на PostgreSQL платформа выдаёт ошибку и прерывает процесс. База не создаётся, работа стоит. Причина почти всегда на стороне сервера PostgreSQL: не тот дистрибутив, не те расширения, не те права.
Разберём пять основных причин ошибки создания информационной базы 1С на PostgreSQL. Каждая — с диагностикой и пошаговым решением. Если вы ещё выбираете между SQL Server и PostgreSQL — сравнение с тестами производительности в отдельной статье.
Краткая таблица причин
| Причина | Быстрая проверка | Время на исправление |
|---|---|---|
| Стандартный PostgreSQL вместо патченного от 1С | psql -c "SELECT extname FROM pg_extension;" | 30–60 минут |
| Нет расширений 1С в template1 | psql -d template1 -c "\dx" | 5 минут |
| У пользователя нет прав CREATEDB | \du в psql | 2 минуты |
| Неверные параметры подключения | Проверить хост, порт, имя кластера в 1С | 5 минут |
| Неправильная кодировка и локаль | psql -c "SHOW server_encoding;" | 30–60 минут |
Причина 1 — стандартный PostgreSQL вместо патченного от 1С
Главная причина ошибки создания информационной базы 1С на PostgreSQL. Платформа 1С:Предприятие требует специальную сборку PostgreSQL с дополнительными расширениями: mchar, fulleq, fasttrun. Стандартный PostgreSQL из официального репозитория их не содержит. Без этих расширений 1С не может создать структуру базы.
1С выпускает собственные сборки PostgreSQL на базе версий 15.x и 16.x. Они доступны на портале users.v8.1c.ru и включают все необходимые расширения. Также патченные сборки предоставляют компании PostgresPro и EDB.
Диагностика
Подключитесь к PostgreSQL и проверьте наличие расширений 1С:
psql -U postgres -d template1 -c "SELECT extname FROM pg_available_extensions WHERE extname IN ('mchar', 'fulleq', 'fasttrun');"
Если результат пуст — расширения не установлены. Значит, дистрибутив PostgreSQL стандартный. Проверьте версию:
psql -U postgres -c "SELECT version();"
В патченной сборке от 1С в строке версии обычно указано (1C patched) или (1C modified). Если такой пометки нет — это стандартный PostgreSQL.
Решение
Установите патченный PostgreSQL от 1С. Порядок действий на Linux:
- Скачайте дистрибутив PostgreSQL с портала users.v8.1c.ru (раздел «Технологические дистрибутивы»). Выберите версию, соответствующую вашей ОС.
- Остановите текущий PostgreSQL:
sudo systemctl stop postgresql. - Сделайте бэкап существующих баз через
pg_dumpall, если они есть. - Удалите стандартный PostgreSQL. На Debian/Ubuntu:
sudo apt remove postgresql postgresql-*. - Установите патченную сборку:
sudo dpkg -i postgresql-1c_*.deb(или черезrpmдля CentOS/RHEL). - Инициализируйте кластер с правильной локалью:
sudo -u postgres /usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main --locale=ru_RU.UTF-8 --encoding=UTF8. - Запустите PostgreSQL:
sudo systemctl start postgresql.
После установки создайте расширения в template1 — об этом в следующем разделе. Подробнее об установке серверных компонентов 1С на Linux — в пошаговой инструкции.
Причина 2 — нет расширений 1С в базе template1
Патченный PostgreSQL установлен, но расширения не созданы в шаблонной базе template1. Когда 1С создаёт информационную базу, PostgreSQL копирует template1 в новую базу. Если в template1 нет расширений mchar, fulleq, fasttrun — в новой базе их тоже не будет. 1С попытается использовать типы данных из этих расширений и получит ошибку.
Диагностика
Проверьте установленные расширения в template1:
psql -U postgres -d template1 -c "\dx"
В списке должны быть: mchar, fulleq, fasttrun, plpgsql. Если не хватает хотя бы одного — это причина ошибки.
Решение
Создайте расширения в template1:
psql -U postgres -d template1 -c "CREATE EXTENSION IF NOT EXISTS mchar;"
psql -U postgres -d template1 -c "CREATE EXTENSION IF NOT EXISTS fulleq;"
psql -U postgres -d template1 -c "CREATE EXTENSION IF NOT EXISTS fasttrun;"
psql -U postgres -d template1 -c "CREATE EXTENSION IF NOT EXISTS plpgsql;"
Расширение plpgsql обычно уже установлено по умолчанию, но лучше проверить. После создания расширений в template1 все новые базы будут содержать их автоматически.
Если 1С уже создала базу без расширений и выдаёт ошибку при подключении — создайте расширения непосредственно в этой базе:
psql -U postgres -d имя_базы_1с -c "CREATE EXTENSION IF NOT EXISTS mchar;"
psql -U postgres -d имя_базы_1с -c "CREATE EXTENSION IF NOT EXISTS fulleq;"
psql -U postgres -d имя_базы_1с -c "CREATE EXTENSION IF NOT EXISTS fasttrun;"
Причина 3 — у пользователя PostgreSQL нет прав на создание баз
1С подключается к PostgreSQL от имени конкретного пользователя. Если у этого пользователя нет привилегии CREATEDB, платформа не сможет создать новую информационную базу. PostgreSQL вернёт ошибку «permission denied to create database».
Диагностика
Проверьте права пользователя в psql:
psql -U postgres -c "\du"
В столбце «Attributes» ищите пользователя, под которым 1С подключается к PostgreSQL. Если в атрибутах нет Create DB — прав на создание баз нет.
Альтернативная проверка через SQL:
psql -U postgres -c "SELECT rolname, rolcreatedb FROM pg_roles WHERE rolname = 'usr1c';"
Если rolcreatedb = f — права CREATEDB нет.
Решение
Выдайте пользователю права на создание баз:
psql -U postgres -c "ALTER ROLE usr1c CREATEDB;"
Замените usr1c на имя пользователя, указанного в настройках подключения 1С. Если пользователь ещё не создан:
psql -U postgres -c "CREATE ROLE usr1c WITH LOGIN PASSWORD 'StrongPassword123!' CREATEDB;"
Не используйте суперпользователя postgres для подключения 1С к базе. Создайте отдельную учётную запись с минимально необходимыми правами — это безопаснее.
Причина 4 — неверные параметры подключения к PostgreSQL
1С подключается к PostgreSQL по хосту, порту и имени кластера. Ошибка в любом из этих параметров — и платформа не находит сервер баз данных. Типичные проблемы: указан localhost вместо IP при удалённом подключении, порт отличается от стандартного 5432, имя кластера не совпадает с реальным.
Диагностика
Проверьте параметры подключения в 1С. Откройте стартовое окно 1С:Предприятия → Изменить → вкладка «Сервер баз данных». Сверьте значения:
- Сервер баз данных: IP-адрес или hostname машины с PostgreSQL
- Порт: по умолчанию 5432 (проверьте в
postgresql.conf: параметрport) - Имя базы: имя, которое 1С присвоит новой базе (латиница, без пробелов)
Проверьте доступность PostgreSQL с машины сервера 1С:
psql -h 192.168.1.10 -p 5432 -U usr1c -d template1 -c "SELECT 1;"
Если подключение не проходит — проблема в сети, брандмауэре или файле pg_hba.conf.
Решение
Проверьте файл pg_hba.conf — он управляет доступом к PostgreSQL. Для подключения с сервера 1С добавьте строку:
# TYPE DATABASE USER ADDRESS METHOD
host all usr1c 192.168.1.0/24 md5
Замените 192.168.1.0/24 на подсеть вашего сервера 1С. Проверьте файл postgresql.conf — параметр listen_addresses должен разрешать подключения с нужного интерфейса:
listen_addresses = '*'
После изменения конфигурации перезагрузите PostgreSQL:
sudo systemctl reload postgresql
Если между сервером 1С и PostgreSQL есть файрвол — откройте порт 5432 (TCP). На Linux:
sudo ufw allow 5432/tcp
Причина 5 — неправильная кодировка и локаль базы
1С:Предприятие требует кодировку UTF-8 и локаль ru_RU.UTF-8 (или en_US.UTF-8). Если кластер PostgreSQL инициализирован с другой кодировкой или локалью — при создании информационной базы 1С получит ошибку. Например, кластер с кодировкой SQL_ASCII или локалью C не подходит для 1С.
Диагностика
Проверьте кодировку и локаль кластера:
psql -U postgres -c "SHOW server_encoding;"
psql -U postgres -c "SHOW lc_collate;"
psql -U postgres -c "SHOW lc_ctype;"
Правильные значения: server_encoding = UTF8, lc_collate = ru_RU.UTF-8, lc_ctype = ru_RU.UTF-8. Допускается en_US.UTF-8 — главное, чтобы кодировка была UTF-8.
Также проверьте кодировку шаблонной базы template1:
psql -U postgres -c "SELECT datname, encoding, datcollate, datctype FROM pg_database WHERE datname = 'template1';"
Если encoding не равен 6 (UTF8) — template1 создана с неправильной кодировкой.
Решение
Кодировку существующего кластера изменить нельзя — нужно пересоздать кластер. Порядок действий:
- Убедитесь, что локаль
ru_RU.UTF-8доступна в системе:locale -a | grep ru_RU. Если нет — установите:sudo locale-gen ru_RU.UTF-8. - Сделайте бэкап всех баз:
pg_dumpall -U postgres > /tmp/all_databases.sql. - Остановите PostgreSQL:
sudo systemctl stop postgresql. - Удалите старый кластер:
sudo pg_dropcluster 16 main --stop. - Создайте новый кластер с правильной локалью:
sudo pg_createcluster 16 main --locale=ru_RU.UTF-8 --encoding=UTF8. - Запустите PostgreSQL:
sudo systemctl start postgresql. - Восстановите базы:
psql -U postgres < /tmp/all_databases.sql. - Создайте расширения 1С в template1 (см. причину 2).
Номер версии (16) замените на вашу версию PostgreSQL. Если баз ещё нет — пропустите шаги с бэкапом и восстановлением.
Как предотвратить ошибку создания ИБ на PostgreSQL
Правильная установка и настройка PostgreSQL с первого раза экономит часы на диагностику. Три правила, которые снимают 95% проблем при создании информационных баз 1С.
Чек-лист перед созданием ИБ
- Патченный PostgreSQL: только сборка от 1С, PostgresPro или EDB. Стандартный PostgreSQL из репозитория не подходит
- Расширения в template1:
mchar,fulleq,fasttrun,plpgsql— все четыре обязательны - Кодировка UTF-8: кластер инициализирован с
--locale=ru_RU.UTF-8 --encoding=UTF8 - Пользователь с CREATEDB: отдельная учётная запись (не postgres) с правом создания баз
- Сетевой доступ:
pg_hba.confразрешает подключение с сервера 1С,listen_addresses = '*' - Порт открыт: файрвол пропускает TCP на порт 5432
Автоматизация проверки
Запустите этот скрипт на сервере PostgreSQL перед созданием информационной базы. Он проверит все ключевые параметры:
psql -U postgres -d template1 -c "
SELECT 'encoding' AS check, current_setting('server_encoding') AS value
UNION ALL
SELECT 'lc_collate', current_setting('lc_collate')
UNION ALL
SELECT 'extensions', string_agg(extname, ', ') FROM pg_extension WHERE extname IN ('mchar','fulleq','fasttrun','plpgsql')
;"
Если все проверки пройдены — устанавливайте сервер 1С и создавайте информационную базу. Подробнее о требованиях к серверу для 1С — в нашей статье.
Вопросы и ответы
Почему 1С не работает со стандартным PostgreSQL?
1С:Предприятие использует собственные типы данных и расширения: mchar (регистронезависимые строки), fulleq (оптимизированное сравнение), fasttrun (быстрая очистка таблиц). Стандартный PostgreSQL их не содержит. Нужна патченная сборка от 1С, PostgresPro или EDB.
Какую версию PostgreSQL выбрать для 1С?
1С поддерживает PostgreSQL 15.x и 16.x в патченных сборках. Рекомендуем последнюю доступную версию с портала users.v8.1c.ru. На момент написания это PostgreSQL 16 с патчами 1С. Версии 14 и старше не рекомендуются — в них нет части оптимизаций для 1С.
Можно ли использовать PostgreSQL от PostgresPro вместо сборки 1С?
Да. PostgresPro (Standard и Enterprise) содержит все необходимые расширения для 1С. PostgresPro Enterprise дополнительно включает оптимизации производительности: мультимастер-репликацию, инкрементальный бэкап, улучшенный планировщик запросов. Для небольших инсталляций достаточно сборки от 1С (бесплатно).
Что такое template1 и зачем в ней расширения?
template1 — шаблонная база PostgreSQL. При создании новой базы данных PostgreSQL копирует содержимое template1 в неё. Если расширения 1С (mchar, fulleq, fasttrun) установлены в template1, каждая новая база автоматически получит их. Это избавляет от ручного создания расширений в каждой информационной базе.
Как перейти с SQL Server на PostgreSQL для 1С?
Миграция выполняется через выгрузку/загрузку информационной базы в формате .dt. В 1С: Администрирование → Выгрузить информационную базу (на SQL Server) → Загрузить информационную базу (на PostgreSQL). Перед загрузкой убедитесь, что PostgreSQL настроен правильно: патченная сборка, расширения в template1, кодировка UTF-8. Сравнение производительности SQL Server и PostgreSQL — в нашем тесте.
Обязательна ли локаль ru_RU.UTF-8 для PostgreSQL с 1С?
Обязательна кодировка UTF-8. Локаль может быть ru_RU.UTF-8 или en_US.UTF-8 — обе работают с 1С. Главное — не использовать SQL_ASCII, LATIN1 или локаль C. При инициализации кластера указывайте --encoding=UTF8.
Нужно ли перезапускать PostgreSQL после создания расширений?
Нет. Расширения создаются командой CREATE EXTENSION и доступны сразу, без перезапуска. Перезапуск нужен только при изменении параметров в postgresql.conf (например, listen_addresses, shared_buffers). Для применения изменений в pg_hba.conf достаточно SELECT pg_reload_conf(); или systemctl reload postgresql.
Итог
Ошибка создания информационной базы 1С на PostgreSQL — следствие неправильной подготовки сервера. Пять причин: стандартный PostgreSQL без патчей 1С, отсутствие расширений в template1, нехватка прав у пользователя, ошибки в параметрах подключения, неправильная кодировка кластера.
Ключевое правило: используйте только патченный PostgreSQL от 1С или PostgresPro с расширениями mchar, fulleq, fasttrun в template1. Кластер инициализируйте с кодировкой UTF-8. Подробнее о выборе между SQL Server и PostgreSQL для 1С — в сравнительном тесте. О том, как подобрать серверное оборудование под 1С — в руководстве по выбору сервера.