1С на PostgreSQL: от установки СУБД до рабочей серверной базы
Содержание
Чтобы подключить 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С + PostgreSQL | 10–200+ пользователей, Linux-инфраструктура, экономия на СУБД | Нужна настройка и администрирование СУБД |
| 1С + MS SQL Server | Уже есть лицензии и экспертиза по MS SQL | Стоимость лицензий, ограничения на поставку |
Что проверить перед подключением 1С к PostgreSQL
Подготовка занимает меньше времени, чем поиск ошибок после неё. Пройдитесь по списку до установки.
Про версии. Не каждая сборка PostgreSQL подходит к каждому релизу платформы. Список совместимых версий СУБД указан в описании релиза платформы на портале обновлений и в документации к сборке. Правило простое: сначала смотрите номер платформы, потом выбирайте сборку СУБД под неё.
Где взять сборку:
- 📦 дистрибутив PostgreSQL от фирмы 1С — лежит на портале обновлений среди технологических дистрибутивов, доступ есть у пользователей с действующей подпиской;
- 📦 Postgres Pro (Standard или Enterprise) — сборки от компании Postgres Professional, совместимые с 1С.
Если сервер 1С и СУБД на одной машине, делите память заранее: под PostgreSQL обычно отдают 40–50% ОЗУ, остальное — рабочим процессам 1С и системе.
Установка PostgreSQL для 1С на Windows и Linux
Windows
- Запустите установщик сборки от имени администратора.
- Выберите установку как службы Windows. Учётную запись службы оставьте предложенную, если нет требований безопасности.
- Укажите каталог данных на быстром диске, например
D:\PostgreSQL\data. - Порт оставьте
5432, если на машине нет второго экземпляра СУБД. - Задайте пароль суперпользователя
postgres. - Кодировку выберите
UTF8, локаль — русскую (Russian, Russia). - После установки проверьте, что служба 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С — порт
1540. - Агент передаёт его менеджеру кластера (
1541) и рабочему процессу (диапазон портов задаётся в свойствах рабочего сервера, по умолчанию1560–1591). - Рабочий процесс сам ходит в PostgreSQL на порт
5432.
Отсюда вывод: доступ к порту 5432 нужен только серверу 1С. Пользователям его открывать не надо.
Когда ODBC всё-таки ставят — драйвер psqlODBC:
- 📊 выгружать данные из базы СУБД в Excel или Power BI напрямую (только чтение и с осторожностью: структура таблиц 1С не предназначена для ручных запросов);
- 🔗 подключать другую базу PostgreSQL к 1С как внешний источник данных.
К подключению самой информационной базы это не относится.
Подключение базы 1С к PostgreSQL: три сценария
Создать новую базу через консоль кластера
- Откройте
Администрирование серверов 1С Предприятия. - Раскройте кластер →
Информационные базы→ в контекстном менюСоздать → Информационная база. - Заполните поля:
| Поле | Что указать |
|---|---|
| Имя | Имя базы в кластере, латиницей без пробелов: buh_main |
| Защищённое соединение | Обычно выключено |
| Сервер баз данных | localhost, имя или IP сервера СУБД; при нестандартном порте — pgsrv port=5433 |
| Тип СУБД | PostgreSQL |
| База данных | Имя базы в СУБД, удобно совпадает с именем в кластере |
| Пользователь сервера БД | postgres или отдельная роль |
| Пароль пользователя БД | Пароль этой роли |
| Создать базу данных в случае её отсутствия | Включить для новой базы |
- Отметьте
Разрешить выдачу лицензий сервером 1С:Предприятия, если лицензии клиентов выдаёт сервер. - Нажмите
ОК. Сервер 1С сам создаст базу в PostgreSQL с нужной кодировкой и расширениями.
Пользователь СУБД. Чаще всего указывают postgres или отдельную роль с правами суперпользователя: при создании базы платформа устанавливает расширения, а прав обычной роли для этого не хватает. Отдельная роль удобнее — её пароль можно сменить, не трогая основную учётку.
Создать базу через окно запуска
В окне запуска 1С: Добавить → Создание новой информационной базы → Создание информационной базы без конфигурации (или из шаблона) → На сервере 1С:Предприятия. Поля те же, плюс Кластер серверов 1С:Предприятия — имя сервера 1С (при нестандартном порте srv1c:1641).
Поле Смещение дат относится к Microsoft SQL Server. Для PostgreSQL его не трогают.
Перенести существующую файловую базу на PostgreSQL
Это самый частый случай на практике. Прямого «переключателя» с файла на СУБД нет — переносят через выгрузку .dt.
- В файловой базе:
Конфигуратор → Администрирование → Выгрузить информационную базу→ сохраните файл.dt. - Создайте пустую серверную базу одним из способов выше.
- Откройте новую базу в конфигураторе:
Администрирование → Загрузить информационную базу→ выберите.dt. - Дождитесь окончания загрузки, запустите базу в режиме предприятия и проверьте остатки по основным счетам и пару отчётов.
- Пропишите базу у пользователей в окне запуска, старую файловую переименуйте или уберите из списка, чтобы в неё случайно не продолжили вводить данные.
Загрузка .dt полностью заменяет данные в базе, куда вы загружаете. Перепутаете базы — потеряете рабочие данные. Сверьте имя базы в заголовке конфигуратора до нажатия кнопки.
Настройка postgresql.conf под нагрузку 1С
Параметры по умолчанию рассчитаны на слабую машину. Для 1С их меняют сразу после установки. Ниже — ориентиры для выделенного сервера СУБД с 32 ГБ ОЗУ и SSD.
| Параметр | Ориентир | Зачем |
|---|---|---|
shared_buffers | 8GB (≈25% ОЗУ) | Кэш страниц самой СУБД |
effective_cache_size | 20GB (50–75% ОЗУ) | Подсказка планировщику, сколько кэширует ОС |
work_mem | 64MB | Память на сортировку в одном запросе |
maintenance_work_mem | 1GB | Ускоряет VACUUM и построение индексов |
temp_buffers | 256MB | 1С активно пишет во временные таблицы |
max_locks_per_transaction | 256 | В базе 1С тысячи таблиц, стандартного запаса не хватает |
max_connections | 300–500 | По числу рабочих процессов и соединений 1С |
random_page_cost | 1.1–1.5 | Для SSD; значение по умолчанию рассчитано на HDD |
autovacuum | on | Без него таблицы разбухают, запросы замедляются |
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 или аналог).