1С на PostgreSQL: от установки СУБД до рабочей серверной базы

· 11 мин

Содержание

Чтобы подключить 1С к PostgreSQL, нужны три вещи: сервер 1С:Предприятия, сборка PostgreSQL с патчами для 1С и запись базы в кластере, где указан тип СУБД PostgreSQL, адрес сервера БД и пользователь postgres. Базу создают в консоли администрирования кластера или в окне запуска через Добавить → Создание новой информационной базы → На сервере 1С:Предприятия.

Частое заблуждение — «поставлю обычный PostgreSQL с официального сайта, и 1С заработает». Не заработает. Платформа использует собственные типы данных и расширения (mchar, mvarchar, fulleq и другие), которых нет в «ванильной» СУБД. Второе заблуждение — что к PostgreSQL можно подключить файловую базу . Нельзя: PostgreSQL работает только в клиент-серверном варианте, через сервер 1С.

Зачем 1С переводят на PostgreSQL и что вы получаете взамен

PostgreSQL выбирают, когда файловая база упёрлась в потолок или нужно уйти с Microsoft SQL Server.

Плюсы:

  • 💰 сама СУБД бесплатная — платить за лицензии MS SQL не нужно;
  • 🐧 работает и на Windows Server, и на Linux, сервер 1С и СУБД можно держать на одной машине Linux;
  • 🇷🇺 сборка Postgres Pro входит в реестр отечественного ПО — это важно для госзаказчиков и компаний с требованиями импортозамещения;
  • 🔁 штатные средства резервирования: pg_dump, pg_basebackup, архив журналов WAL, реплики.

Минусы и цена вопроса:

  • 🔑 лицензия на сервер 1С:Предприятия нужна всё равно — без неё клиент-серверная база не запустится;
  • 🛠 СУБД требует настройки под нагрузку 1С: с параметрами «по умолчанию» отчёты и закрытие месяца работают медленно;
  • 👤 нужен человек, который умеет читать логи PostgreSQL, следить за автовакуумом и восстанавливать базу из копии.
ВариантКогда подходитРиски
Файловая базаДо 5–10 пользователей, одна организация, небольшой объёмБлокировки и тормоза при росте, повреждение файла 1Cv8.1CD при сбоях сети
1С + PostgreSQL10–200+ пользователей, Linux-инфраструктура, экономия на СУБДНужна настройка и администрирование СУБД
1С + MS SQL ServerУже есть лицензии и экспертиза по MS SQLСтоимость лицензий, ограничения на поставку

Что проверить перед подключением 1С к PostgreSQL

Подготовка занимает меньше времени, чем поиск ошибок после неё. Пройдитесь по списку до установки.

Перед установкой PostgreSQL для 1С
Выполнено: 0 / 7

Про версии. Не каждая сборка PostgreSQL подходит к каждому релизу платформы. Список совместимых версий СУБД указан в описании релиза платформы на портале обновлений и в документации к сборке. Правило простое: сначала смотрите номер платформы, потом выбирайте сборку СУБД под неё.

Где взять сборку:

  • 📦 дистрибутив PostgreSQL от фирмы 1С — лежит на портале обновлений среди технологических дистрибутивов, доступ есть у пользователей с действующей подпиской;
  • 📦 Postgres Pro (Standard или Enterprise) — сборки от компании Postgres Professional, совместимые с 1С.

Если сервер 1С и СУБД на одной машине, делите память заранее: под PostgreSQL обычно отдают 40–50% ОЗУ, остальное — рабочим процессам 1С и системе.

Установка PostgreSQL для 1С на Windows и Linux

Windows

  1. Запустите установщик сборки от имени администратора.
  2. Выберите установку как службы Windows. Учётную запись службы оставьте предложенную, если нет требований безопасности.
  3. Укажите каталог данных на быстром диске, например D:\PostgreSQL\data.
  4. Порт оставьте 5432, если на машине нет второго экземпляра СУБД.
  5. Задайте пароль суперпользователя postgres.
  6. Кодировку выберите UTF8, локаль — русскую (Russian, Russia).
  7. После установки проверьте, что служба PostgreSQL запущена: services.msc, служба со словом postgresql в имени.

Откройте порт в брандмауэре, если СУБД стоит на отдельном сервере:

New-NetFirewallRule -DisplayName "PostgreSQL 5432" -Direction Inbound -Protocol TCP -LocalPort 5432 -Action Allow

Linux

На Linux порядок такой же, но есть одна ловушка — локаль. Если в системе нет ru_RU.UTF-8, кластер СУБД инициализируется с другой локалью, и сортировка строк в 1С поедет.

# 1. Сгенерировать русскую локаль
sudo locale-gen ru_RU.UTF-8
sudo update-locale

# 2. Установить пакеты сборки по инструкции к дистрибутиву

# 3. Если кластер не создался при установке — инициализировать вручную
sudo -u postgres initdb -D /var/lib/pgsql/data --locale=ru_RU.UTF-8 -E UTF8

# 4. Задать пароль суперпользователю
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'СложныйПароль'"

Путь к каталогу данных и способ запуска службы зависят от дистрибутива и сборки — смотрите инструкцию к пакету. Если сервер 1С на другой машине, откройте порт только для его адреса:

sudo ufw allow from 10.0.0.5 to any port 5432 proto tcp

Сетевой доступ: postgresql.conf и pg_hba.conf

По умолчанию СУБД слушает только localhost. Когда сервер 1С стоит отдельно, правят два файла в каталоге данных.

В postgresql.conf:

listen_addresses = '*'
port = 5432

В pg_hba.conf добавьте строку для сервера 1С:

# TYPE  DATABASE  USER      ADDRESS        METHOD
host    all       postgres  10.0.0.5/32    scram-sha-256

Метод scram-sha-256 используйте, если пароль задан в этом формате; на старых сборках встречается md5. Не пишите trust для сетевых адресов — это вход без пароля. После правки pg_hba.conf достаточно перечитать конфигурацию (SELECT pg_reload_conf();), а смена listen_addresses требует перезапуска службы.

Перезапуск службы PostgreSQL обрывает все сеансы 1С, которые работают с этой СУБД. На рабочем сервере делайте это вне рабочего времени.

Нужны ли драйверы для связи 1С с PostgreSQL

Короткий ответ: для работы самой базы — нет. Сервер 1С обращается к PostgreSQL напрямую, по родному протоколу СУБД. ODBC-драйвер, отдельные клиентские библиотеки и PostgreSQL на компьютерах пользователей не нужны.

Схема подключения выглядит так:

  1. Клиент 1С (толстый, тонкий или веб-клиент) подключается к агенту сервера 1С — порт 1540.
  2. Агент передаёт его менеджеру кластера (1541) и рабочему процессу (диапазон портов задаётся в свойствах рабочего сервера, по умолчанию 1560–1591).
  3. Рабочий процесс сам ходит в PostgreSQL на порт 5432.

Отсюда вывод: доступ к порту 5432 нужен только серверу 1С. Пользователям его открывать не надо.

Когда ODBC всё-таки ставят — драйвер psqlODBC:

  • 📊 выгружать данные из базы СУБД в Excel или Power BI напрямую (только чтение и с осторожностью: структура таблиц 1С не предназначена для ручных запросов);
  • 🔗 подключать другую базу PostgreSQL к 1С как внешний источник данных.

К подключению самой информационной базы это не относится.

Подключение базы 1С к PostgreSQL: три сценария

Создать новую базу через консоль кластера

  1. Откройте Администрирование серверов 1С Предприятия.
  2. Раскройте кластер → Информационные базы → в контекстном меню Создать → Информационная база.
  3. Заполните поля:
ПолеЧто указать
ИмяИмя базы в кластере, латиницей без пробелов: buh_main
Защищённое соединениеОбычно выключено
Сервер баз данныхlocalhost, имя или IP сервера СУБД; при нестандартном порте — pgsrv port=5433
Тип СУБДPostgreSQL
База данныхИмя базы в СУБД, удобно совпадает с именем в кластере
Пользователь сервера БДpostgres или отдельная роль
Пароль пользователя БДПароль этой роли
Создать базу данных в случае её отсутствияВключить для новой базы
  1. Отметьте Разрешить выдачу лицензий сервером 1С:Предприятия, если лицензии клиентов выдаёт сервер.
  2. Нажмите ОК. Сервер 1С сам создаст базу в PostgreSQL с нужной кодировкой и расширениями.

Пользователь СУБД. Чаще всего указывают postgres или отдельную роль с правами суперпользователя: при создании базы платформа устанавливает расширения, а прав обычной роли для этого не хватает. Отдельная роль удобнее — её пароль можно сменить, не трогая основную учётку.

Создать базу через окно запуска

В окне запуска 1С: Добавить → Создание новой информационной базы → Создание информационной базы без конфигурации (или из шаблона) → На сервере 1С:Предприятия. Поля те же, плюс Кластер серверов 1С:Предприятия — имя сервера 1С (при нестандартном порте srv1c:1641).

Поле Смещение дат относится к Microsoft SQL Server. Для PostgreSQL его не трогают.

Перенести существующую файловую базу на PostgreSQL

Это самый частый случай на практике. Прямого «переключателя» с файла на СУБД нет — переносят через выгрузку .dt.

  1. В файловой базе: Конфигуратор → Администрирование → Выгрузить информационную базу → сохраните файл .dt.
  2. Создайте пустую серверную базу одним из способов выше.
  3. Откройте новую базу в конфигураторе: Администрирование → Загрузить информационную базу → выберите .dt.
  4. Дождитесь окончания загрузки, запустите базу в режиме предприятия и проверьте остатки по основным счетам и пару отчётов.
  5. Пропишите базу у пользователей в окне запуска, старую файловую переименуйте или уберите из списка, чтобы в неё случайно не продолжили вводить данные.

Загрузка .dt полностью заменяет данные в базе, куда вы загружаете. Перепутаете базы — потеряете рабочие данные. Сверьте имя базы в заголовке конфигуратора до нажатия кнопки.

Настройка postgresql.conf под нагрузку 1С

Параметры по умолчанию рассчитаны на слабую машину. Для 1С их меняют сразу после установки. Ниже — ориентиры для выделенного сервера СУБД с 32 ГБ ОЗУ и SSD.

ПараметрОриентирЗачем
shared_buffers8GB (≈25% ОЗУ)Кэш страниц самой СУБД
effective_cache_size20GB (50–75% ОЗУ)Подсказка планировщику, сколько кэширует ОС
work_mem64MBПамять на сортировку в одном запросе
maintenance_work_mem1GBУскоряет VACUUM и построение индексов
temp_buffers256MB1С активно пишет во временные таблицы
max_locks_per_transaction256В базе 1С тысячи таблиц, стандартного запаса не хватает
max_connections300–500По числу рабочих процессов и соединений 1С
random_page_cost1.1–1.5Для SSD; значение по умолчанию рассчитано на HDD
autovacuumonБез него таблицы разбухают, запросы замедляются

work_mem выделяется на каждую операцию сортировки, а не на соединение. При 300 соединениях и 256MB на каждое память кончится быстро — поэтому не завышайте его «с запасом».

Сборки для 1С содержат модули online_analyze и plantuner, которые помогают планировщику с временными таблицами. Их подключают через shared_preload_libraries:

shared_preload_libraries = 'online_analyze, plantuner'
online_analyze.enable = on
online_analyze.table_type = 'temporary'
online_analyze.verbose = off
plantuner.fix_empty_table = on

Смена shared_buffers, max_connections и shared_preload_libraries вступает в силу только после перезапуска службы.

Встречается совет synchronous_commit = off или fsync = off «для скорости». Первый при сбое питания теряет последние секунды транзакций, второй может повредить базу целиком. На рабочей базе fsync не выключайте никогда.

Если тормозит конкретный отчёт, а не всё подряд, крутить общие параметры бесполезно. Включите log_min_duration_statement = 5000 — в журнал СУБД попадут запросы дольше 5 секунд, и станет видно, на чём именно стоит база.

Резервные копии базы 1С на PostgreSQL

Есть два независимых способа, и лучше иметь оба.

1. Средствами СУБД — pg_dump. Работает без остановки пользователей, копия согласованная на момент старта.

@echo off
set PGPASSWORD=СложныйПароль
set D=%date:~6,4%-%date:~3,2%-%date:~0,2%
"C:\Program Files\PostgreSQL\bin\pg_dump.exe" -h localhost -U postgres -Fc -f "E:\backup\buh_main_%D%.backup" buh_main

Путь к pg_dump.exe замените на свой каталог установки. Формат даты в %date% зависит от региональных настроек — проверьте имя получившегося файла. Вместо пароля в скрипте надёжнее файл pgpass.conf в профиле пользователя, от которого идёт задание.

Восстановление в новую пустую базу:

createdb -h localhost -U postgres buh_restore
pg_restore -h localhost -U postgres -d buh_restore -j 4 buh_main_2026-10-07.backup

Затем зарегистрируйте buh_restore в кластере 1С, флажок Создать базу данных в случае её отсутствия при этом не ставьте.

2. Средствами 1С — выгрузка .dt. Копия не зависит от версии СУБД и подходит для переноса на другую СУБД или в файловый вариант. Но на большой базе выгрузка идёт долго, а для ежедневных копий удобнее pg_dump.

Для баз, где потеря даже часа работы критична, настраивают pg_basebackup плюс архивирование WAL — это позволяет восстановиться на любой момент времени. Это уже задача администратора СУБД.

Копия, которую ни разу не разворачивали, — не копия. Раз в месяц восстанавливайте последний бэкап в тестовую базу и открывайте её в 1С.

Ошибки при подключении 1С к PostgreSQL и что с ними делать

Текст ошибки СУБД 1С показывает внутри своего сообщения, обычно после слов Ошибка СУБД:. Ищите в нём ключевую фразу.

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

Ещё одна неочевидная ситуация: база создалась, но списки и справочники сортируются не по алфавиту. Причина — кластер СУБД инициализирован не с русской локалью. Лечится только пересозданием кластера с правильной локалью и переносом базы через .dt, поэтому локаль проверяйте до создания баз: команда SHOW lc_collate; в psql должна вернуть ru_RU.UTF-8 (на Windows — Russian_Russia.1251 или аналог).

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

Можно ли подключить файловую базу 1С к PostgreSQL без сервера 1С?
Нет. PostgreSQL работает с 1С только через сервер 1С:Предприятия. Файловую базу сначала выгружают в .dt и загружают в серверную.
Нужна ли отдельная лицензия на PostgreSQL?
На саму СУБД — нет, она распространяется бесплатно. Платные редакции Postgres Pro лицензируются отдельно. Лицензия на сервер 1С нужна в любом случае.
Можно ли держать несколько баз 1С в одном экземпляре PostgreSQL?
Да. Каждая база 1С — отдельная база внутри одного кластера СУБД. Ограничение одно — память и диск сервера.
Как узнать, какой PostgreSQL стоит на сервере?
Выполните в psql запрос SELECT version(); — в ответе будет номер версии и название сборки.
Почему после перехода с файловой базы на PostgreSQL что-то стало медленнее?
Чаще всего СУБД работает на параметрах по умолчанию или мешает сеть между сервером 1С и сервером СУБД. Начните с настроек памяти и журнала медленных запросов.