Разворачиваем информационную базу 1С:Предприятия на сервере PostgreSQL
Содержание
Чтобы создать базу 1С на PostgreSQL, нужны три вещи: сборка PostgreSQL с патчами для 1С, установленный сервер 1С:Предприятия 8.3 и пользователь СУБД с правом создавать базы. Саму базу данных вручную в psql создавать не обязательно: в консоли кластера или в окне запуска 1С выбираете тип СУБД «PostgreSQL», указываете сервер, имя базы, логин и ставите флажок «Создать базу данных
в случае ее отсутствия». Платформа сама создаст базу на сервере PostgreSQL и таблицы в ней.
Типичная ситуация: компания переросла файловый вариант, 15 пользователей висят на блокировках, а лицензия MS SQL стоит заметных денег. Переход на клиент-серверный вариант с PostgreSQL решает обе задачи. Ниже пошаговая инструкция от установки сервера до первого входа в базу, с настройкой и переносом данных.
1. Что подготовить: железо, ОС и подходящая сборка PostgreSQL
Обычный PostgreSQL из репозитория дистрибутива для 1С не подходит. Платформе нужны дополнительные расширения: тип mchar (строки без учёта регистра, как в MS SQL), fulleq и ряд доработок планировщика. Без них база либо не создастся, либо будет работать заметно медленнее.
Где взять подходящую сборку:
- 🐘 PostgreSQL от фирмы 1С — дистрибутивы лежат на портале обновлений рядом с платформой, доступны при действующей подписке.
- 🐘 Postgres Pro для 1С — бесплатная сборка компании Postgres Professional, ставится из её репозитория.
- 🐘 Postgres Pro Standard / Enterprise — коммерческие редакции с поддержкой, когда нужен сертифицированный продукт.
Версию PostgreSQL подбирайте под версию платформы. Перед установкой откройте список поддерживаемых СУБД в описании вашего релиза платформы: новые мажорные версии PostgreSQL платформа поддерживает не сразу. Безопасный путь — взять ту мажорную версию, которую сборщик выпускает именно «для 1С», и платформу не ниже указанной в требованиях.
Ориентиры по серверу для небольшой и средней компании:
| Нагрузка | Пользователей | CPU | RAM | Диск |
|---|---|---|---|---|
| Малая | до 10 | 4 ядра | 8–16 ГБ | SSD от 100 ГБ |
| Средняя | 10–50 | 8 ядер | 32 ГБ | NVMe, отдельно данные и WAL |
| Крупная | 50+ | 16+ ядер | 64 ГБ и больше | NVMe RAID 10 |
Цифры примерные: всё зависит от конфигурации и размера базы. ЗУП на 200 человек и ERP на 5 млн документов — разные миры.
💡 PostgreSQL и сервер 1С можно держать на одной машине — так проще и быстрее для малых нагрузок. Разносить их по разным серверам имеет смысл, когда база и пользователи растут. ОС может быть любой из поддерживаемых: Linux (Debian, Ubuntu, РЕД ОС, Astra и др.) или Windows Server 2016 и новее.
2. Установка PostgreSQL для 1С на Linux и Windows
Разберём установку на примере Postgres Pro для 1С версии 14 на Ubuntu или Debian. Для другой мажорной версии меняется только число в адресе и имени пакета.
Шаг 1. Русская локаль
1С требует, чтобы кластер PostgreSQL был инициализирован с локалью ru_RU.UTF-8. Сгенерируйте её до установки СУБД:
sudo locale-gen ru_RU.UTF-8
sudo update-locale
locale -a | grep ru_RU
Если последняя команда ничего не вывела, локаль не создана, и инициализация кластера закончится ошибкой.
Шаг 2. Репозиторий и пакет
wget https://repo.postgrespro.ru/1c/1c-14/keys/pgpro-repo-add.sh
sudo sh pgpro-repo-add.sh
sudo apt install postgrespro-1c-14
Программы встанут в /opt/pgpro/1c-14/bin. Точный адрес скрипта для нужной версии сверяйте на сайте Postgres Professional: структура репозитория у разных версий своя.
Шаг 3. Инициализация кластера с профилем 1С
sudo /opt/pgpro/1c-14/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8
sudo /opt/pgpro/1c-14/bin/pg-setup service enable
sudo /opt/pgpro/1c-14/bin/pg-setup service start
Ключ --tune=1c сразу выставляет набор параметров, рекомендованных для 1С. Ручную донастройку разберём в разделе 4.
На Windows
Запустите установщик сборки для 1С, на шаге параметров кластера выберите локаль Russian, Russia и кодировку UTF8, задайте пароль пользователя postgres и порт (по умолчанию 5432). После установки проверьте, что служба PostgreSQL запущена и стоит в автозапуске.
Если на сервере уже работает другой экземпляр PostgreSQL, новый займёт порт 5433 или следующий свободный. Это пригодится при подключении: порт тогда указывается явно.
3. Пользователь СУБД и доступ с сервера 1С
Пароль и отдельная роль
Сначала задайте пароль служебному пользователю postgres:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'СложныйПароль';"
Для работы 1С удобнее завести отдельную роль, чтобы не светить пароль суперпользователя в настройках кластера:
CREATE ROLE usr1c WITH LOGIN SUPERUSER PASSWORD 'ДругойСложныйПароль';
Права суперпользователя нужны потому, что при создании базы 1С устанавливает в неё расширения, а это требует повышенных прав. Компромисс по безопасности закрывают сетевыми ограничениями: к СУБД должен подключаться только сервер 1С.
Разрешить подключение по сети
Если сервер 1С и PostgreSQL стоят на разных машинах, нужно открыть две вещи.
- В
postgresql.confпараметрlisten_addresses:
listen_addresses = '*'
- В
pg_hba.confстроку для адреса сервера 1С (пример для10.0.0.5):
# TYPE DATABASE USER ADDRESS METHOD
host all usr1c 10.0.0.5/32 md5
Метод md5 понимают все версии платформы. scram-sha-256 надёжнее, но требует свежей платформы, поэтому проверьте поддержку в описании релиза, прежде чем переходить на него.
- Перечитайте настройки. Изменение
pg_hba.confприменяется перезагрузкой конфигурации, аlisten_addresses— только перезапуском службы:
sudo /opt/pgpro/1c-14/bin/pg-setup service restart
Перезапуск службы PostgreSQL обрывает все подключения к базам. На рабочем сервере делайте это вне рабочего времени, предупредив пользователей.
На сервере не забудьте открыть порт 5432 в файрволе, но только для адреса сервера 1С, а не для всей сети.
4. Параметры postgresql.conf, которые реально влияют на скорость 1С
Профиль --tune=1c даёт разумный старт. Дальше параметры подгоняют под объём памяти. Пример для выделенного сервера СУБД с 32 ГБ RAM и SSD:
| Параметр | Значение | Зачем |
|---|---|---|
shared_buffers | 8GB | ≈25% RAM, кэш страниц самого PostgreSQL |
effective_cache_size | 22GB | ≈70% RAM, подсказка планировщику о кэше ОС |
work_mem | 64MB | память на сортировку в одном запросе |
maintenance_work_mem | 1GB | ускоряет VACUUM и построение индексов |
temp_buffers | 128MB | 1С активно пользуется временными таблицами |
max_connections | 500 | у 1С много соединений на рабочие процессы |
max_locks_per_transaction | 256 | спасает от out of shared memory |
random_page_cost | 1.1 | для SSD/NVMe вместо значения по умолчанию 4 |
from_collapse_limit, join_collapse_limit | 20 | запросы 1С соединяют много таблиц |
standard_conforming_strings | off | ожидаемое платформой поведение строк |
escape_string_warning | off | убирает лишние предупреждения в логе |
Если сервер 1С стоит на той же машине, урежьте shared_buffers и effective_cache_size: рабочим процессам 1С тоже нужна память.
work_mem выделяется на каждую операцию сортировки, а не на соединение. При 300 одновременных тяжёлых запросах 64 МБ превращаются в 19 ГБ. Не задирайте его до сотен мегабайт «на всякий случай».
synchronous_commit = off и тем более fsync = off ускоряют запись, но при сбое питания вы теряете последние транзакции или всю базу. Не выключайте fsync на рабочей базе. synchronous_commit = off допустим только при осознанном риске потерять несколько секунд работы.
В сборках для 1С есть свои параметры, например online_analyze.enable и plantuner.fix_empty_table. Их значения уже выставляет профиль 1С, без замеров их лучше не трогать.
5. Создание информационной базы 1С на сервере PostgreSQL
Сервер 1С:Предприятия к этому моменту должен быть установлен и запущен. Проверьте, что агент сервера слушает порт 1540.
Вариант А: через консоль администрирования кластера
- Откройте
Администрирование серверов 1С Предприятия, добавьте центральный сервер, если его ещё нет. - Раскройте кластер, правой кнопкой по
Информационные базы→Создать→Информационная база. - Заполните поля:
- Имя — имя базы в кластере, по нему подключаются клиенты, например
buh; - Защищённое соединение — «выключено», если не настраивали TLS;
- Сервер баз данных — адрес PostgreSQL:
localhost,10.0.0.10или с портом:10.0.0.10 port=5433; - Тип СУБД —
PostgreSQL; - База данных — имя базы в PostgreSQL, латиницей в нижнем регистре, например
buh; - Пользователь сервера БД и Пароль — роль из раздела 3;
- Смещение дат —
0(смещение 2000 нужно для MS SQL); - Разрешить выдачу лицензий сервером 1С:Предприятия — по вашей схеме лицензирования;
- Создать базу данных в случае ее отсутствия — включить;
- Установить блокировку регламентных заданий — включить, если это копия рабочей базы.
- Имя — имя базы в кластере, по нему подключаются клиенты, например
- Нажмите
OK. Через несколько секунд база появится в списке, а в PostgreSQL — новая база данных.
Вариант Б: прямо из окна запуска 1С
- В окне запуска нажмите
Добавить→Создание новой информационной базы. - Выберите: из шаблона (типовая конфигурация) или пустую базу.
- Вариант расположения —
На сервере 1С:Предприятия. - Заполните кластер серверов (имя сервера 1С), имя базы и те же параметры СУБД, что в варианте А.
- Поставьте флажок
Создать базу данных в случае ее отсутствияи завершите мастер.
💡 Имя базы в кластере и имя базы в PostgreSQL могут различаться, но одинаковые имена сильно упрощают поддержку: сразу видно, какая база данных к какой информационной базе относится.
6. Перенос рабочей базы с MS SQL или файлового варианта
Прямой перенос «таблица в таблицу» между СУБД для 1С не нужен. Платформа сама переливает данные через файл выгрузки .dt.
- Предупредите пользователей и выгоните их из базы: для выгрузки нужен монопольный доступ.
- В Конфигураторе старой базы:
Администрирование → Выгрузить информационную базу→ сохраните файл.dt. - Создайте пустую базу на PostgreSQL по разделу 5.
- Откройте новую базу в Конфигураторе:
Администрирование → Загрузить информационную базу→ выберите файл.dt. - После загрузки запустите
Администрирование → Тестирование и исправлениес режимом только проверки и убедитесь, что ошибок нет. - Откройте базу в пользовательском режиме и сверьте контрольные цифры: остатки по ключевым счетам, оборотно-сальдовую ведомость за последний месяц, количество документов.
Для больших баз удобнее серверная утилита ibcmd с командами выгрузки и загрузки: она работает без клиента и не упирается в ограничения оконного Конфигуратора. Синтаксис смотрите в ibcmd help для вашей версии платформы.
Что может «вылезти» после переезда:
- ⚙️ Прямые запросы к СУБД во внешних обработках, отчётах BI или интеграциях написаны на T-SQL — их придётся переписать.
- ⚙️ Тяжёлые отчёты могут вести себя иначе: у PostgreSQL свой планировщик. Первые дни следите за медленными запросами.
- ⚙️ Регламентные задания в скопированной базе стартуют сами, если не стоит блокировка: обмены и рассылки уйдут в работу из тестовой копии.
Старую базу на MS SQL не удаляйте первые две-три недели. Если что-то пойдёт не так, откат займёт минуты, а не сутки.
7. Обслуживание базы 1С на PostgreSQL: бэкапы, VACUUM, мониторинг
Резервные копии
Выгрузка .dt — не замена бэкапа: она медленная и требует монопольного доступа. Основной инструмент — pg_dump в сжатом формате:
/opt/pgpro/1c-14/bin/pg_dump -U postgres -Fc -f /backup/buh_$(date +%F).dump buh
Восстановление — pg_restore в пустую базу. Для крупных баз и точки восстановления на любой момент времени подключают непрерывное архивирование WAL или специализированные утилиты вроде pg_probackup.
Раз в месяц проверяйте, что бэкап реально разворачивается: восстановите его в тестовую базу и откройте в 1С.
VACUUM и статистика
1С много пишет и удаляет во временных и регистровых таблицах. Автоочистка (autovacuum) должна быть включена всегда. Дополнительно раз в неделю, ночью, запускайте:
/opt/pgpro/1c-14/bin/vacuumdb -U postgres --all --analyze
Эта команда не блокирует работу пользователей. VACUUM FULL и REINDEX без параметра CONCURRENTLY блокируют таблицы, их запускают только в окно обслуживания.
Мониторинг
| Что смотреть | Как |
|---|---|
| Активные запросы и зависшие транзакции | представление pg_stat_activity |
| Медленные запросы | log_min_duration_statement = 5000 (мс) в postgresql.conf |
| Рост базы | SELECT pg_size_pretty(pg_database_size('buh')); |
| Место на диске | свободно не меньше размера самой большой базы, иначе не поместится бэкап |
| Ожидания на блокировках | pg_locks вместе с pg_stat_activity |