Как перевести 1С:Предприятие 8.3 на PostgreSQL: сервер, роль, база в кластере
Содержание
Подключить 1С к PostgreSQL можно только в клиент-серверном варианте: базу создаёт и обслуживает сервер 1С:Предприятия, а не клиент. Порядок такой: ставите сборку PostgreSQL с патчами для 1С, создаёте роль с паролем, открываете доступ в pg_hba.conf, затем в консоли кластера или в окне запуска создаёте информационную базу с типом СУБД PostgreSQL.
Файловую базу
«подключить» к PostgreSQL напрямую нельзя. Её переносят выгрузкой: в Конфигураторе сохраняете .dt, создаёте пустую серверную базу
на PostgreSQL и загружаете файл туда.
Что подготовить до установки PostgreSQL
Сначала соберите три вещи: совместимую сборку СУБД, сервер 1С и сеть между ними.
Сборка СУБД: только с патчами для 1С
Обычный PostgreSQL из репозитория дистрибутива для 1С не подходит. Платформа использует собственные типы данных mchar и mvarchar и ряд расширений (fasttrun, fulleq, online_analyze, plantuner). Их нет в «ванильной» сборке, и база не создастся.
Варианты, которые работают:
- 📦 сборка PostgreSQL, которую фирма 1С выкладывает для своих партнёров и пользователей с подпиской;
- 📦 бесплатные сборки «PostgreSQL для 1С» от компании Postgres Professional;
- 📦 коммерческая Postgres Pro (Standard или Enterprise) — для крупных баз с требованиями к поддержке.
Версию СУБД подбирайте под версию платформы. В документации к каждому релизу платформы есть список поддерживаемых версий PostgreSQL. Номер СУБД должен входить в этот список, иначе сервер 1С откажется работать с базой или поведёт себя непредсказуемо.
Сервер 1С и лицензии
На машине (или соседней машине) должен работать сервер 1С:Предприятия 8.3 той же разрядности, что и клиенты, которые к нему подключаются. Для работы нужна лицензия на сервер 1С и клиентские лицензии на пользователей.
Сеть и порты
| Компонент | Порт по умолчанию | Кто подключается |
|---|---|---|
| PostgreSQL | 5432 | рабочие процессы сервера 1С |
Агент сервера 1С (ragent) | 1540 | клиенты, консоль кластера |
Менеджер кластера (rmngr) | 1541 | клиенты после агента |
Рабочие процессы (rphost) | 1560–1591 | клиенты |
К PostgreSQL обращаются не пользователи, а сервер 1С. Значит, порт 5432 достаточно открыть только для адреса сервера 1С. Если оба сервиса стоят на одной машине, СУБД можно вообще не выставлять наружу.
На Linux заранее проверьте, что в системе есть локаль ru_RU.UTF-8 (команда locale -a). Без неё кластер PostgreSQL и базы 1С с русской сортировкой создаются с ошибками.
Установка PostgreSQL для 1С на Windows и Linux
Windows
- Запустите установщик выбранной сборки от имени администратора.
- Укажите каталог данных на быстром диске (SSD), отдельно от системного, если есть такая возможность.
- Задайте пароль суперпользователя
postgresи запишите его. - Оставьте порт
5432, если на сервере нет другого экземпляра PostgreSQL. - Выберите локаль
Russian, Russiaи кодировкуUTF8. - После установки проверьте, что служба PostgreSQL запущена и стартует автоматически.
Linux (Debian/Ubuntu, РЕД ОС, Astra)
Подключите репозиторий выбранной сборки по инструкции её поставщика и установите пакеты сервера. Затем инициализируйте кластер с русской локалью. Для сборок, где кластер создаётся вручную, команда выглядит так:
sudo -u postgres /usr/lib/postgresql/<версия>/bin/initdb \
-D /var/lib/postgresql/<версия>/main \
--locale=ru_RU.UTF-8 --encoding=UTF8
Путь к initdb и каталогу данных зависит от сборки: у Postgres Pro он свой, у сборок на базе пакетов Debian — свой. Проверьте его в документации к пакету.
Убедитесь, что служба запущена:
sudo systemctl status postgresql
Роль для 1С и доступ к базе данных PostgreSQL
Создайте отдельную роль
Работать под postgres можно, но удобнее завести отдельного пользователя для сервера 1С. Подключитесь через psql и выполните:
CREATE ROLE usr1c WITH LOGIN SUPERUSER PASSWORD 'СложныйПароль_2x';
Права суперпользователя нужны потому, что платформа при создании базы сама создаёт в ней расширения и служебные объекты. С урезанной ролью создание базы обычно падает на этом шаге. Если политика безопасности запрещает суперпользователя, базу и расширения заранее создаёт администратор СУБД, а роль 1С делают владельцем этой базы — но такой вариант нужно проверить на тестовом стенде.
Пароль роли попадёт в настройки информационной базы в кластере 1С. Не используйте пароль, который совпадает с паролями других систем.
Разрешите подключение в pg_hba.conf
Файл лежит в каталоге данных PostgreSQL (на Windows — в папке data установки). Добавьте строку для адреса сервера 1С:
# TYPE DATABASE USER ADDRESS METHOD
host all usr1c 192.168.10.15/32 scram-sha-256
Если сервер 1С стоит на той же машине, укажите 127.0.0.1/32.
Метод scram-sha-256 — стандарт для современных версий PostgreSQL. Старые сборки платформы 1С не поддерживали SCRAM и падали на аутентификации. В этом случае для адреса сервера 1С временно ставят md5 и задают пароль роли заново (пароль хранится в том формате, который был активен в момент его установки).
Откройте прослушивание сети
В postgresql.conf проверьте параметр:
listen_addresses = '*'
Можно перечислить конкретные адреса вместо *. После правки pg_hba.conf достаточно перечитать конфигурацию, а смена listen_addresses требует перезапуска службы.
Перезапуск PostgreSQL обрывает все текущие сеансы 1С на этом сервере. Делайте его вне рабочего времени или после того, как пользователи вышли из баз.
Создание информационной базы 1С на PostgreSQL в кластере серверов
Базу регистрируют одним из двух способов. Результат одинаковый.
Способ 1. Через консоль администрирования серверов 1С
- Откройте консоль, разверните
Центральные серверы 1С:Предприятия 8.3 → <имя сервера> → Кластеры → <кластер>. - На ветке
Информационные базывызовите контекстное менюСоздать → Информационная база. - Заполните поля:
- Имя — как база будет называться в кластере, например
buh_main; - Защищённое соединение —
выключено, если вы не настраивали шифрование; - Сервер баз данных — имя или IP машины с PostgreSQL;
- Тип СУБД —
PostgreSQL; - База данных — имя базы в PostgreSQL (лучше латиницей, строчными буквами);
- Пользователь сервера БД и Пароль — роль
usr1cи её пароль.
- Имя — как база будет называться в кластере, например
- Поставьте флажок
Создать базу данных в случае её отсутствия. - При необходимости включите
Установить блокировку регламентных заданий— это полезно для копий рабочих баз, чтобы они не загружали банк и не слали отчёты. - Нажмите
ОК.
Способ 2. Из окна запуска 1С
- В списке баз нажмите
Добавить→Создание новой информационной базы. - Выберите пустую базу или шаблон, затем вариант расположения
На сервере 1С:Предприятия. - Заполните те же поля: кластер серверов
, имя базы в кластере, тип СУБД
PostgreSQL, сервер баз данных, имя базы данных, пользователь и пароль. - Отметьте создание базы данных при её отсутствии и завершите мастер.
Нестандартный порт PostgreSQL
Если СУБД слушает не 5432, порт указывают в поле сервера баз данных через пробел:
pgserver port=5433
Перенос существующей базы
Когда пустая база создана, откройте её в Конфигураторе и выполните Администрирование → Загрузить информационную базу, указав .dt. Загрузка требует монопольного доступа и заменяет всё содержимое базы. На базах в десятки гигабайт она идёт от десятков минут до нескольких часов.
Настройки postgresql.conf и производительность 1С на PostgreSQL
Параметры по умолчанию рассчитаны на слабую машину. Для 1С их стоит поднять. Ориентиры для выделенного сервера СУБД:
| Параметр | Ориентир | Зачем |
|---|---|---|
shared_buffers | 25% ОЗУ | кеш страниц самой СУБД |
effective_cache_size | 50–75% ОЗУ | подсказка планировщику о кеше ОС |
work_mem | 32–128 МБ | сортировки и соединения в запросах |
maintenance_work_mem | 512 МБ–2 ГБ | VACUUM, создание индексов, загрузка .dt |
max_connections | с запасом под рабочие процессы 1С | каждое соединение сервера 1С — отдельный процесс |
max_locks_per_transaction | 256 и выше | 1С держит много временных таблиц в транзакции |
random_page_cost | 1.1–1.5 для SSD | планировщик чаще выбирает индексы |
Пример для сервера с 16 ГБ ОЗУ, где кроме PostgreSQL ничего нет:
shared_buffers = 4GB
effective_cache_size = 11GB
work_mem = 64MB
maintenance_work_mem = 1GB
max_locks_per_transaction = 256
random_page_cost = 1.1
work_mem выделяется на каждую операцию сортировки, а не на соединение. При 100 соединениях и сложных отчётах 128 МБ легко превращаются в нехватку памяти, поэтому начинайте с 32–64 МБ.
Для сборок под 1С проверьте, что включены параметры расширения online_analyze (обычно уже прописаны поставщиком сборки). Оно обновляет статистику по временным таблицам, без этого отчёты 1С на PostgreSQL заметно тормозят.
Если сервер 1С и PostgreSQL стоят на одной машине, делите память: ориентир — половина ОЗУ на СУБД, остальное процессам rphost. Тогда shared_buffers берите от этой половины, а не от всего объёма.
Если базы большие, держите каталог данных и WAL на SSD. Медленный диск на PostgreSQL проявляется сразу: долгие проведения и зависания при закрытии месяца.
Ошибки при подключении 1С к PostgreSQL
Большинство отказов видно по тексту, который сервер 1С возвращает при создании или открытии базы. Найдите в нём фразу на английском — это ответ PostgreSQL.
SELECT pg_reload_conf();.Если база создалась, но не открывается
- 🔍 Ошибка про локаль или сортировку — кластер PostgreSQL инициализирован без
ru_RU.UTF-8. Проще пересоздать кластер СУБД с нужной локалью на новом сервере и перенести базы через.dt, чем чинить на месте. - 🔍 Клиент не видит сервер 1С — это уже не PostgreSQL: проверьте порты
1540,1541и диапазон рабочих процессов на брандмауэре. - 🔍 Медленно работает всё — посмотрите, включён ли autovacuum и не стоят ли параметры памяти по умолчанию (
shared_buffers = 128MB).
Обслуживание и резервное копирование базы 1С на PostgreSQL
Регулярное обслуживание
PostgreSQL не удаляет старые версии строк сразу: это делает VACUUM. Держите autovacuum = on — его хватает для повседневной работы. После крупных операций (загрузка .dt, закрытие года, свёртка базы) запустите обслуживание вручную:
vacuumdb -U postgres -d buh_main --analyze --verbose
VACUUM FULL переписывает таблицы целиком и блокирует их на всё время работы. Для базы 1С это значит остановку работы пользователей, поэтому запускайте его только в окно обслуживания.
Резервные копии средствами PostgreSQL
Логическая копия одной базы в сжатом формате:
pg_dump -U postgres -Fc -f /backup/buh_main_$(date +%F).dump buh_main
Восстановление в новую пустую базу:
createdb -U postgres -T template0 buh_restore
pg_restore -U postgres -d buh_restore -j 4 /backup/buh_main_2026-10-07.dump
После восстановления зарегистрируйте buh_restore в кластере 1С как новую информационную базу, без флажка создания базы данных.
Для больших баз и восстановления на момент времени используют физическое копирование: pg_basebackup и архивирование WAL. Это сложнее в настройке, но позволяет откатиться на конкретную минуту.
Сравнение способов
| Способ | Когда подходит | Ограничения |
|---|---|---|
pg_dump / pg_restore | ежедневные копии баз до сотен ГБ | копия на момент запуска, восстановление долгое |
pg_basebackup + WAL | крупные базы, точка во времени | нужно место под архив WAL и отработанная процедура |
Выгрузка .dt из Конфигуратора | перенос между СУБД, передача базы | нужен монопольный доступ, медленно на больших базах |
Копия, которую ни разу не восстанавливали, — не копия. Раз в месяц разворачивайте дамп в тестовую базу и открывайте её в 1С.
Частые вопросы
Можно ли подключить файловую базу 1С к PostgreSQL без сервера 1С?
.dt и загрузкой в серверную базу.Нужно ли ставить PostgreSQL на тот же сервер, что и 1С?
Как узнать, на какой СУБД работает база?
Можно ли поднять версию PostgreSQL под существующей базой 1С?
pg_dump/pg_restore или .dt и проверка на копии.