PostgreSQL под сервер 1С:Предприятия: от дистрибутива до первой базы

· 10 мин

Содержание

Чтобы установить 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. Запустите установщик сборки для 1С от имени администратора.
  2. Каталог установки оставьте по умолчанию, каталог данных лучше вынести на отдельный диск, например D:\pgdata.
  3. Учётная запись службы — postgres (локальная или сетевая). Задайте ей пароль.
  4. Порт — 5432, если на машине нет второго экземпляра PostgreSQL.
  5. Локаль — Russian, Russia, кодировка — UTF8.
  6. Задайте пароль суперпользователя СУБД postgres. Запишите его: он понадобится при создании базы в 1С.
  7. После установки проверьте в оснастке 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_buffers8GB (около 25% памяти)общий кэш страниц
effective_cache_size22GB (60–75% памяти)подсказка планировщику, сколько данных в кэше ОС
work_mem64MBпамять под сортировки и хеши на одну операцию
maintenance_work_mem1GBускоряет VACUUM и построение индексов
temp_buffers256MB1С активно пользуется временными таблицами
max_connections300 и вышекаждый рабочий процесс 1С держит несколько соединений
max_locks_per_transaction256иначе на больших операциях ловите out of shared memory
random_page_cost1.1для SSD; на HDD оставьте 4
effective_io_concurrency200для 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С Предприятия» и разверните кластер.
  2. На узле «Информационные базы» выберите «Создать» → «Информационная база».
  3. Заполните поля:
    • Имя — имя базы в кластере 1С, латиницей, без пробелов, например buh_main;
    • Сервер баз данных — имя или IP сервера PostgreSQL (localhost, если на той же машине);
    • Тип СУБД — PostgreSQL;
    • База данных — имя базы в PostgreSQL, удобно совпадающее с именем в кластере;
    • Пользователь сервера БД и Пароль — postgres или ваша роль;
    • Смещение дат — 0;
    • флажок «Создать базу данных в случае ее отсутствия» — включить.
  4. Нажмите «ОК». Создание пустой базы занимает от нескольких секунд до минуты.
  5. Добавьте базу в список у пользователей: в окне запуска «Добавить» → «Добавление в список существующей информационной базы» → «На сервере 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 секунд.
Сервер PostgreSQL готов к работе с 1С
Выполнено: 0 / 8

7. Частые вопросы о PostgreSQL для 1С

Можно ли поставить обычный PostgreSQL из репозитория Ubuntu?
Нет. Платформе 1С нужны доработки СУБД, которых в стандартной сборке нет. Используйте сборку для 1С или Postgres Pro.
Нужна ли отдельная лицензия на PostgreSQL?
Сборка для 1С и PostgreSQL сами по себе бесплатны. Лицензии нужны на сервер 1С и клиентские подключения. Postgres Pro Enterprise и коммерческая поддержка Postgres Pro платные.
Ставить PostgreSQL на ту же машину, что и сервер 1С?
Для 10–30 пользователей — нормально, это экономит сетевые задержки. При росте нагрузки СУБД выносят на отдельный сервер с быстрыми дисками.
Можно ли держать несколько версий PostgreSQL на одном сервере?
Можно, если у кластеров разные порты и каталоги данных. Так удобно переходить на новую версию: поднимаете второй кластер и переносите базы по одной.
Что быстрее для 1С: PostgreSQL или MS SQL?
На типовых нагрузках при правильной настройке разница невелика. Без настройки postgresql.conf и autovacuum PostgreSQL обычно проигрывает — поэтому шаги из раздела про параметры не стоит пропускать.