Как настроить работу 1С:Предприятие с базой на PostgreSQL

· 9 мин

Содержание

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. Сравнивайте версии по номеру, а не «новее/старее».

Перед установкой проверьте
Выполнено: 0 / 5

Если сервер 1С и PostgreSQL стоят на одной машине — проще: сетевой доступ настраивать почти не придётся. Если на разных — заранее согласуйте, что между ними открыт TCP-порт 5432.

Установка PostgreSQL и инициализация кластера

На Windows установщик от поставщика проведёт через мастер. Ключевые экраны:

  1. Каталог установки и каталог данных (PGDATA) — запомните путь к данным, в нём лежит pg_hba.conf.
  2. Пароль суперпользователя postgres — задайте надёжный и запишите, без него базу не подключить.
  3. Порт — по умолчанию 5432, менять без нужды не стоит.
  4. Локаль и кодировка — кластер инициализируется в 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С. В кластере раскройте узел Информационные базы, в контекстном меню — Создать → Информационная база.

Поля подключения в обоих случаях одинаковы:

  1. Сервер баз данных — адрес машины с PostgreSQL (имя или IP). Если СУБД на том же сервере, допустимо localhost.
  2. Тип СУБД — выберите PostgreSQL.
  3. База данных — имя создаваемой базы (латиницей, без пробелов).
  4. Пользователь сервера БД — обычно postgres.
  5. Пароль — тот самый пароль суперпользователя.
  6. Смещение дат — оставьте значение по умолчанию (как правило, 2000).
  7. Включите флажок «Создать базу данных в случае её отсутствия» — тогда 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С или в журнале СУБД. Ниже — что означает симптом и куда смотреть.

Диагностика: выберите симптом

Ещё две ошибки, которые путают:

  • Кодировка. Если база создавалась не в UTF-8, 1С выдаёт ошибки с кириллицей. Исправляется только пересозданием кластера СУБД в UTF-8 — на лету кодировку базы не меняют.
  • scram вместо md5. Самый частый случай после установки свежего PostgreSQL на старую платформу: в pg_hba.conf стоит md5, но пароль в СУБД сохранён как scram-sha-256. Проверьте password_encryption и переустановите пароль.

Если ничего из перечисленного не подошло, снимите точный текст ошибки из журнала PostgreSQL (PGDATA/log) — он конкретнее, чем сообщение в клиенте 1С.

Частые вопросы

Нужен ли на клиентских компьютерах драйвер PostgreSQL?
Нет. К СУБД обращается только сервер «1С:Предприятия». На клиентах ничего, связанного с PostgreSQL, устанавливать не требуется — они соединяются с сервером 1С, а не с базой напрямую.
Можно ли подключить к 1С уже существующую базу PostgreSQL от другой системы?
Нет. 1С разворачивает в базе собственную служебную структуру и работает только со своими базами. Сторонняя база для информационной базы 1С не подойдёт; данные переносят через обмен или загрузку, а не прямым подключением.
Подойдёт ли обычный PostgreSQL с сайта сообщества?
Официально — нет. Используйте сборку, совместимую с 1С, или PostgresPro для 1С. На ванильной сборке возможны сбои регламентных операций и полнотекстового поиска.
Файловую базу 1С можно перевести на PostgreSQL?
Да, через выгрузку в .dt из файловой базы и загрузку в новую серверную ИБ на PostgreSQL. Прямого «переключения» файловой базы на СУБД нет — создаётся новая информационная база на сервере.
Какой пользователь СУБД указывать при создании базы?
Как правило, суперпользователя postgres. Если заводите отдельную роль, ей нужно право CREATEDB и владение создаваемой базой, иначе 1С не сможет её создать и обслуживать.