PostgreSQL под сервер 1С:Предприятия: от дистрибутива до первой базы
Содержание
Чтобы установить PostgreSQL для 1С, нужна не обычная сборка с сайта PostgreSQL, а пропатченная: дистрибутив «PostgreSQL для 1С» с портала обновлений 1С или Postgres Pro (у него есть редакция с поддержкой 1С). Ставите её на сервер, инициализируете кластер с локалью ru_RU.UTF-8, задаёте пароль пользователю postgres, открываете доступ в pg_hba.conf — и создаёте информационную базу из консоли кластера 1С.
Ванильный PostgreSQL 1С не примет: платформе нужны доработки, в том числе модули online_analyze, plantuner, fasttrun и тип mchar. Поэтому порядок такой: сначала подобрать версию под платформу, потом ставить СУБД, потом настраивать.
1. Что проверить до установки PostgreSQL для 1С
Версия СУБД под вашу платформу
Каждый релиз платформы 1С:Предприятие 8.3 поддерживает конкретные мажорные версии PostgreSQL. Список приводится в системных требованиях к релизу платформы. Правило простое: номер версии СУБД берёте из этого списка, а не самый свежий.
💡 Если сервер 1С ещё не установлен, сначала выберите релиз платформы, а уже под него — PostgreSQL. Обратный порядок часто заканчивается переустановкой.
Откуда брать дистрибутив
| Вариант | Где взять | Когда выбирать |
|---|---|---|
| PostgreSQL для 1С (сборка фирмы 1С) | портал обновлений, раздел технологических дистрибутивов (нужна подписка ИТС) | типовой сервер, есть доступ к порталу |
| Postgres Pro Standard / Enterprise | сайт Postgres Professional, есть репозитории для Linux | нужна поддержка вендора, сертифицированная СУБД, крупные базы |
| Сборки от сообщества с патчами 1С | сторонние репозитории | только для тестов, в продуктив не ставить |
Железо и ОС
- 🖥️ ОС: Windows Server 2016 и новее либо Linux (Ubuntu, Debian, RHEL-совместимые, Astra Linux, РЕД ОС). На Linux PostgreSQL работает заметно стабильнее под нагрузкой.
- 💾 Диск: SSD или NVMe. На HDD 1С с PostgreSQL заметно медленнее, чем с MS SQL на том же железе.
- 🧠 Память: от 8 ГБ для небольшой базы на 5–10 пользователей; от 16–32 ГБ, если на той же машине работает сервер 1С.
- 📂 Отдельный раздел под каталог данных, если есть такая возможность. Так проще следить за местом и делать снимки.
Локаль — главная ловушка
1С ожидает, что кластер PostgreSQL создан с русской локалью и кодировкой UTF-8. Если кластер инициализирован в C или en_US.UTF-8, сортировка и поиск по строкам в 1С будут работать неправильно, а часть релизов платформы откажется создавать базу.
На Linux заранее сгенерируйте локаль:
sudo locale-gen ru_RU.UTF-8
sudo update-locale
locale -a | grep ru_RU
2. Установка PostgreSQL и инициализация кластера
Windows
- Запустите установщик сборки для 1С от имени администратора.
- Каталог установки оставьте по умолчанию, каталог данных лучше вынести на отдельный диск, например
D:\pgdata. - Учётная запись службы —
postgres(локальная или сетевая). Задайте ей пароль. - Порт —
5432, если на машине нет второго экземпляра PostgreSQL. - Локаль —
Russian, Russia, кодировка —UTF8. - Задайте пароль суперпользователя СУБД
postgres. Запишите его: он понадобится при создании базы в 1С. - После установки проверьте в оснастке
services.msc, что служба PostgreSQL запущена и стоит тип запуска «Автоматически».
⚠️ Антивирус на сервере СУБД исключите из проверки каталог данных. Сканирование файлов базы на лету убивает производительность и иногда блокирует файлы.
Linux (Debian, Ubuntu)
Сборка 1С поставляется архивом с deb-пакетами. Порядок установки:
# распакованные пакеты ставим одной командой:
# apt сам подтянет зависимости из репозиториев дистрибутива
cd ~/pg1c && sudo apt install -y ./*.deb
Если пакеты требуют конкретную версию libicu, которой нет в вашем дистрибутиве, — это частый случай на новых Ubuntu. Тогда либо доставьте нужную библиотеку из старого репозитория, либо переходите на Postgres Pro: его репозиторий собран под актуальные версии ОС.
Кластер создаётся утилитами postgresql-common:
sudo pg_dropcluster --stop 16 main # если кластер создался с неверной локалью
sudo pg_createcluster --locale ru_RU.UTF-8 16 main -- --data-checksums
sudo systemctl enable --now postgresql
Число 16 — мажорная версия, подставьте свою. Проверить локаль готового кластера:
sudo -u postgres psql -c "\l"
В колонках Collate и Ctype должно стоять ru_RU.UTF-8.
Пароль пользователю postgres на Linux задаётся вручную:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'СложныйПароль';"
Не удаляйте кластер, в котором уже есть базы 1С. Команда pg_dropcluster выше нужна только сразу после установки, пока данных нет.
3. Параметры postgresql.conf, которые стоит поменять сразу
Файл лежит в каталоге данных на Windows и в /etc/postgresql/<версия>/main/ на Debian и Ubuntu. Сборки для 1С уже содержат часть нужных значений, но память установщик под ваш сервер не подбирает.
Ориентиры для выделенного сервера СУБД с 32 ГБ памяти и SSD:
| Параметр | Значение | Зачем |
|---|---|---|
shared_buffers | 8GB (около 25% памяти) | общий кэш страниц |
effective_cache_size | 22GB (60–75% памяти) | подсказка планировщику, сколько данных в кэше ОС |
work_mem | 64MB | память под сортировки и хеши на одну операцию |
maintenance_work_mem | 1GB | ускоряет VACUUM и построение индексов |
temp_buffers | 256MB | 1С активно пользуется временными таблицами |
max_connections | 300 и выше | каждый рабочий процесс 1С держит несколько соединений |
max_locks_per_transaction | 256 | иначе на больших операциях ловите out of shared memory |
random_page_cost | 1.1 | для SSD; на HDD оставьте 4 |
effective_io_concurrency | 200 | для SSD/NVMe на Linux |
Если сервер 1С работает на той же машине, делите память: долю под shared_buffers уменьшите до 15–20%, а остальное оставьте рабочим процессам 1С.
Специфичные для 1С настройки
Проверьте, что в файле есть эти строки (в сборках для 1С они обычно уже включены):
shared_preload_libraries = 'online_analyze, plantuner'
online_analyze.enable = on
online_analyze.table_type = 'temporary'
online_analyze.verbose = off
online_analyze.threshold = 50
online_analyze.scale_factor = 0.1
plantuner.fix_empty_table = on
standard_conforming_strings = off
escape_string_warning = off
online_analyze собирает статистику по временным таблицам сразу после их заполнения. Без него запросы 1С с временными таблицами часто получают плохой план и выполняются в разы дольше.
После правки shared_buffers и shared_preload_libraries нужен перезапуск службы. ⚠️ Перезапуск PostgreSQL обрывает все сеансы 1С на этом сервере — делайте его до подключения пользователей или в технологическое окно.
sudo systemctl restart postgresql
4. Сетевой доступ: listen_addresses и pg_hba.conf
Если сервер 1С и PostgreSQL на одной машине, достаточно локальных подключений — по умолчанию они разрешены. Если на разных, нужны два шага.
Шаг 1. В postgresql.conf разрешите слушать внешние адреса:
listen_addresses = '*'
Можно указать конкретный IP вместо звёздочки — так безопаснее.
Шаг 2. В pg_hba.conf добавьте строку для сервера 1С. Правила читаются сверху вниз, срабатывает первое подходящее:
# TYPE DATABASE USER ADDRESS METHOD
host all postgres 10.0.0.15/32 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
Здесь 10.0.0.15 — адрес сервера 1С. Открывать всю подсеть 0.0.0.0/0 не нужно: к СУБД ходит только сервер 1С, а не компьютеры пользователей.
Про метод аутентификации:
- 🔐
scram-sha-256— современный и безопасный, по умолчанию в новых версиях PostgreSQL. - 🔓
md5— для старых релизов платформы, которые не умеют SCRAM. Если переключаетесь наmd5, выставьтеpassword_encryption = md5и задайте пароль пользователю заново: хеш пароля хранится в том формате, в котором его задали. - 🚫
trust— без пароля. Только для временной отладки на изолированном стенде.
pg_hba.conf перечитывается без перезапуска:
sudo -u postgres psql -c "SELECT pg_reload_conf();"
Не забудьте файрвол: порт 5432/tcp должен быть открыт только для адреса сервера 1С. На Ubuntu: sudo ufw allow from 10.0.0.15 to any port 5432 proto tcp.
5. Пользователь СУБД и создание информационной базы
Под каким пользователем подключать 1С
Самый простой и распространённый вариант — пользователь postgres. Он суперпользователь, поэтому 1С сама создаст базу и установит нужные расширения.
Отдельная роль под 1С аккуратнее с точки зрения безопасности:
CREATE ROLE usr1c WITH LOGIN SUPERUSER PASSWORD 'ДругойСложныйПароль';
Права суперпользователя этой роли обычно всё равно нужны: при создании и реструктуризации базы платформа выполняет операции, которые обычной роли недоступны. Зато пароль от postgres не придётся отдавать тем, кто администрирует только 1С.
Создание базы через консоль кластера
- Откройте «Администрирование серверов 1С Предприятия» и разверните кластер.
- На узле «Информационные базы» выберите «Создать» → «Информационная база».
- Заполните поля:
- Имя — имя базы в кластере 1С, латиницей, без пробелов, например
buh_main; - Сервер баз данных — имя или IP сервера PostgreSQL (
localhost, если на той же машине); - Тип СУБД —
PostgreSQL; - База данных — имя базы в PostgreSQL, удобно совпадающее с именем в кластере;
- Пользователь сервера БД и Пароль —
postgresили ваша роль; - Смещение дат —
0; - флажок «Создать базу данных в случае ее отсутствия» — включить.
- Имя — имя базы в кластере 1С, латиницей, без пробелов, например
- Нажмите «ОК». Создание пустой базы занимает от нескольких секунд до минуты.
- Добавьте базу в список у пользователей: в окне запуска «Добавить» → «Добавление в список существующей информационной базы» → «На сервере 1С:Предприятия», указав кластер и имя базы.
💡 Если PostgreSQL слушает нестандартный порт, укажите его в поле сервера так: 10.0.0.20 port=5433.
Дальше загружаете в пустую базу выгрузку .dt через Конфигуратор или ставите конфигурацию из шаблона. Загрузка .dt требует монопольного доступа к базе — в новую базу ещё никто не зашёл, так что здесь это не проблема.
Если база не создаётся
6. Обслуживание базы PostgreSQL под 1С
Установка — половина дела. Без обслуживания база через несколько месяцев раздувается и замедляется.
Autovacuum и статистика
PostgreSQL не удаляет старые версии строк сразу — этим занимается VACUUM. Autovacuum должен быть включён всегда (autovacuum = on). Для активных баз 1С стоит сделать его агрессивнее:
autovacuum_max_workers = 4
autovacuum_naptime = 20s
autovacuum_vacuum_scale_factor = 0.01
autovacuum_analyze_scale_factor = 0.005
Раз в сутки ночью полезно дополнительно обновить статистику по всем базам:
sudo -u postgres vacuumdb --all --analyze-only --jobs=4
Полный VACUUM FULL и REINDEX блокируют таблицы. Запускайте их только в технологическое окно, когда пользователи вышли из 1С.
Резервное копирование
Делайте копии средствами СУБД, а не только выгрузкой .dt: pg_dump работает без выгона пользователей.
sudo -u postgres pg_dump -Fc -f /backup/buh_main_$(date +%F).dump buh_main
Формат -Fc сжатый, восстанавливается через pg_restore. Для крупных баз и восстановления на момент времени настраивают архивирование WAL и базовые копии через pg_basebackup.
Копия, которую ни разу не восстанавливали, — не копия. Раз в месяц разворачивайте дамп в тестовую базу и открывайте её в 1С.
Что контролировать
- 📈 Размер баз:
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database; - 🐢 Долгие запросы и висящие транзакции: представление
pg_stat_activity, колонкиstateиxact_start. - 💽 Свободное место на разделе с данными и WAL: при заполнении диска PostgreSQL останавливается.
- 🧾 Журнал СУБД: включите
log_min_duration_statement = 5000, чтобы видеть запросы дольше 5 секунд.