Как настроить работу 1С:Предприятие с базой на PostgreSQL
Содержание
1С соединяется с PostgreSQL не через ODBC и не через внешний драйвер на клиенте — связь держит сервер «1С:Предприятия», а параметры базы вы задаёте один раз при создании информационной базы в кластере. Поэтому «настройка источника данных ODBC», которую иногда советуют, к этой задаче отношения не имеет.
Чтобы подключить базу
PostgreSQL к платформе 1С:Предприятие, нужны три вещи: совместимая сборка СУБД, открытый сетевой доступ (listen_addresses + pg_hba.conf) и запущенный сервер 1С, через который вы создадите или подключите базу. Разберём по шагам для 1С 8.3 (интерфейс «Такси»), на Windows Server 2016 и новее и на Linux.
Все действия выполняйте под учётной записью с правами администратора ОС. Перезапуск службы PostgreSQL обрывает все активные сеансы пользователей — делайте его в окно, когда в базе никто не работает.
Что подготовить до установки СУБД
Платформа 1С работает не с любой сборкой PostgreSQL. Ванильный PostgreSQL с официального сайта сообщества 1С официально не поддерживает: нужна сборка, совместимая с 1С (специально собранный дистрибутив от поставщика платформы) либо редакция PostgresPro для 1С. На обычной сборке часть регламентных операций и полнотекстовый поиск могут работать некорректно.
Проверьте совместимость по номеру: версия сервера 1С должна быть не ниже той, с которой заявлена поддержка выбранной версии PostgreSQL. Сравнивайте версии по номеру, а не «новее/старее».
Если сервер 1С и PostgreSQL стоят на одной машине — проще: сетевой доступ настраивать почти не придётся. Если на разных — заранее согласуйте, что между ними открыт TCP-порт 5432.
Установка PostgreSQL и инициализация кластера
На Windows установщик от поставщика проведёт через мастер. Ключевые экраны:
- Каталог установки и каталог данных (PGDATA) — запомните путь к данным, в нём лежит
pg_hba.conf. - Пароль суперпользователя
postgres— задайте надёжный и запишите, без него базу не подключить. - Порт — по умолчанию
5432, менять без нужды не стоит. - Локаль и кодировка — кластер инициализируется в UTF-8. Это обязательное требование 1С.
На Linux установите пакеты из репозитория поставщика сборки, затем инициализируйте кластер с нужной кодировкой. Команда инициализации (путь к initdb зависит от дистрибутива):
/usr/pgsql/bin/initdb -D /var/lib/pgsql/data -E UTF8 --locale=ru_RU.UTF-8
systemctl enable --now postgresql
После установки убедитесь, что служба поднялась. На Windows это служба вида postgresql-x64-... в оснастке services.msc. На Linux:
systemctl status postgresql
Если служба не стартует, первым делом смотрите журнал PostgreSQL в каталоге PGDATA/log (или PGDATA/pg_log). В 90% случаев причина видна прямо в последних строках: занятый порт, нет прав на каталог данных, повреждённый конфиг.
Открытие доступа: listen_addresses и порт
По умолчанию PostgreSQL слушает только локальный адрес. Если сервер 1С стоит на другой машине, СУБД его просто не увидит, пока вы не разрешите приём по сети.
Откройте postgresql.conf в каталоге PGDATA и приведите две строки к виду:
listen_addresses = '*'
port = 5432
listen_addresses = '*' — слушать на всех интерфейсах. Если хотите ограничиться конкретным адресом сервера, укажите его явно вместо звёздочки. Параметр listen_addresses применяется только после перезапуска службы (не перечитывания конфига).
Отдельно проверьте firewall. На Windows откройте порт 5432 для входящих TCP во встроенном брандмауэре. На Linux — через firewalld или ufw:
firewall-cmd --permanent --add-port=5432/tcp && firewall-cmd --reload
Не открывайте порт 5432 в интернет. PostgreSQL должен быть доступен только из внутренней сети, где стоит сервер 1С. Прямой доступ к СУБД извне — прямой путь к утечке базы.
Если сервер 1С и СУБД всё же разнесены по разным площадкам и трафик идёт по недоверенной сети, включите шифрование соединения. В postgresql.conf за это отвечает ssl = on и пути к сертификату с ключом; в pg_hba.conf вместо host пишут hostssl, чтобы соединения без шифрования отклонялись. На одной машине или в изолированной внутренней сети это избыточно.
Настройка аутентификации в pg_hba.conf
Файл pg_hba.conf (в каталоге PGDATA) решает, кому и каким способом разрешено подключаться. Правила читаются сверху вниз, срабатывает первое подходящее — порядок строк важен.
Чтобы сервер 1С мог подключиться с другой машины, добавьте строку для его подсети:
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.0/24 md5
Замените 192.168.1.0/24 на реальную подсеть или точный адрес сервера 1С (192.168.1.50/32). Методы аутентификации различаются:
| Метод | Когда применять | Риск |
|---|---|---|
scram-sha-256 | Современный метод по умолчанию в новых версиях PostgreSQL | Старые релизы платформы 1С его не понимают — будет ошибка пароля |
md5 | Совместимый вариант для старых платформ | Слабее scram, но для изолированной внутренней сети приемлем |
trust | Никогда в рабочей базе | Пускает без пароля кого угодно из подсети |
Если платформа старая и соединение падает с ошибкой проверки пароля, переключите метод на md5. Одной строки в pg_hba.conf мало: нужно, чтобы пароль в СУБД был сохранён в формате md5. Задайте в postgresql.conf параметр password_encryption = md5 и заново установите пароль пользователю (ALTER ROLE postgres PASSWORD '...') — иначе хэш останется в старом формате.
После правки pg_hba.conf перечитайте конфигурацию. Полный перезапуск для этого файла не нужен:
# Linux
systemctl reload postgresql
# или из psql:
SELECT pg_reload_conf();
На Windows подойдёт Перезапустить в свойствах службы, но помните про обрыв сеансов.
Создание информационной базы в кластере 1С
Вот здесь и происходит собственно «подключение» — не настройкой драйвера, а созданием информационной базы на сервере 1С с указанием PostgreSQL как СУБД.
Два равноценных пути:
Через конфигуратор или окно запуска. Нажмите Добавить → Создание новой информационной базы → Создание информационной базы без конфигурации (или из шаблона) → тип размещения На сервере 1С:Предприятия. Откроется форма с параметрами подключения к СУБД.
Через консоль администрирования серверов 1С. В кластере раскройте узел Информационные базы, в контекстном меню — Создать → Информационная база.
Поля подключения в обоих случаях одинаковы:
- Сервер баз данных — адрес машины с PostgreSQL (имя или IP). Если СУБД на том же сервере, допустимо
localhost. - Тип СУБД — выберите
PostgreSQL. - База данных — имя создаваемой базы (латиницей, без пробелов).
- Пользователь сервера БД — обычно
postgres. - Пароль — тот самый пароль суперпользователя.
- Смещение дат — оставьте значение по умолчанию (как правило,
2000). - Включите флажок «Создать базу данных в случае её отсутствия» — тогда 1С сама создаст базу в PostgreSQL. Без него подключение к несуществующей базе завершится ошибкой.
Пользователь, под которым подключается 1С, должен иметь право создавать базы данных. Поэтому в типовой схеме используют суперпользователя postgres. Если заводите отдельную роль, выдайте ей CREATEDB и сделайте владельцем будущей базы.
После нажатия ОК сервер 1С обратится к PostgreSQL, создаст базу (если стоял флажок) и развернёт в ней служебную структуру. Это может занять от нескольких секунд до пары минут.
Первый запуск и проверка соединения
Если информационная база появилась в списке и открывается в конфигураторе — соединение установлено. Для контроля загрузите конфигурацию (из шаблона или пустую) и выполните Обновить конфигурацию базы данных (F7): это запишет метаданные в PostgreSQL и подтвердит, что запись в базу проходит.
Быстрая проверка со стороны СУБД — подключиться утилитой psql и посмотреть список баз:
psql -h 127.0.0.1 -U postgres -c "\l"
В списке должна появиться созданная база. Если psql соединяется, а 1С — нет, проблема почти всегда в pg_hba.conf или сетевом доступе, а не в самой СУБД.
Разовую диагностику сети делайте проверкой доступности порта с машины сервера 1С (Test-NetConnection -Port 5432 в PowerShell или psql -h <адрес> оттуда же). Если порт недоступен — вопрос к listen_addresses и firewall, до аутентификации дело ещё не дошло.
Настройка производительности PostgreSQL под 1С
Сборка из коробки настроена консервативно. Под реальную нагрузку 1С правят несколько параметров в postgresql.conf. Значения ниже — ориентировочные, отталкивайтесь от объёма ОЗУ сервера:
- 🧠
shared_buffers— примерно 25% от ОЗУ (на сервере с 16 ГБ — около4GB). - 📊
effective_cache_size— ориентировочно 50–75% ОЗУ; это подсказка планировщику, память не резервирует. - ⚙️
work_mem— осторожно, умножается на число соединений; начните с64MBи смотрите по нагрузке. - 🔗
max_connections— с запасом на все рабочие процессы кластера 1С (обычно 100–200). - 💾
maintenance_work_mem— для реиндексации и вакуума, порядка256MB–1GB.
После правки shared_buffers и max_connections нужен полный перезапуск службы — сеансы оборвутся. Планируйте на нерабочее время.
Отдельно включите и настройте автоочистку (autovacuum — он включён по умолчанию, не отключайте его). Для баз 1С регулярный VACUUM/ANALYZE критичен: без свежей статистики планировщик строит плохие планы и запросы замедляются.
Когда рабочих процессов в кластере много и соединений к базе становится сотни, между 1С и PostgreSQL ставят пул соединений. Увлекаться не стоит: 1С держит собственные соединения по своей логике, и агрессивный пулинг иногда конфликтует с длинными транзакциями при обновлении конфигурации. Вводите пул осознанно и только если упираетесь в max_connections, а не «на всякий случай».
Типичные ошибки подключения и их причины
Большинство проблем на этапе подключения дают узнаваемый текст в сообщении 1С или в журнале СУБД. Ниже — что означает симптом и куда смотреть.
listen_addresses разрешает приём по сети, порт 5432 открыт в firewall.host all all <подсеть> md5 в pg_hba.conf и перечитайте конфигурацию.md5 и переустановите пароль роли, чтобы сменился формат хэша.Ещё две ошибки, которые путают:
- Кодировка. Если база создавалась не в UTF-8, 1С выдаёт ошибки с кириллицей. Исправляется только пересозданием кластера СУБД в UTF-8 — на лету кодировку базы не меняют.
- scram вместо md5. Самый частый случай после установки свежего PostgreSQL на старую платформу: в
pg_hba.confстоитmd5, но пароль в СУБД сохранён какscram-sha-256. Проверьтеpassword_encryptionи переустановите пароль.
Если ничего из перечисленного не подошло, снимите точный текст ошибки из журнала PostgreSQL (PGDATA/log) — он конкретнее, чем сообщение в клиенте 1С.
Частые вопросы
Нужен ли на клиентских компьютерах драйвер PostgreSQL?
Можно ли подключить к 1С уже существующую базу PostgreSQL от другой системы?
Подойдёт ли обычный PostgreSQL с сайта сообщества?
Файловую базу 1С можно перевести на PostgreSQL?
.dt из файловой базы и загрузку в новую серверную ИБ на PostgreSQL. Прямого «переключения» файловой базы на СУБД нет — создаётся новая информационная база на сервере.Какой пользователь СУБД указывать при создании базы?
postgres. Если заводите отдельную роль, ей нужно право CREATEDB и владение создаваемой базой, иначе 1С не сможет её создать и обслуживать.