Как поставить PostgreSQL для 1С и подключить к нему базу
Содержание
Есть два способа поставить СУБД под 1С: на Windows запустить готовый установщик, на Linux поставить пакеты из репозитория. Результат один: сервер PostgreSQL слушает порт 5432, а сервер 1С:Предприятия создаёт в нём базы. Для файловой базы PostgreSQL не нужен совсем, он нужен клиент-серверному режиму.
Главное условие: берите сборку PostgreSQL, которую поддерживает 1С для вашей версии платформы. Обычный PostgreSQL из репозитория дистрибутива с 1С работает хуже и не всегда поддерживается. Подходят сборки, которые 1С прикладывает к платформе, и сборки Postgres Pro для 1С. Совместимость версии СУБД с платформой смотрите в документации к вашей платформе.
Ниже порядок такой: подготовка сервера, установка, кодировка и кластер, пользователь и доступ, параметры, создание базы в консоли, обслуживание.
Подготовка: сколько ресурсов нужно и что проверить до установки
Сначала решите, где будет жить СУБД. Отдельный сервер под PostgreSQL лучше, чем одна машина с сервером 1С: они конкурируют за память и диск.
Ориентиры для старта (это не нормативы, а практика):
| Нагрузка | Пользователей | Память | Диск |
|---|---|---|---|
| Небольшая | до 10 | 8 ГБ | SSD, от 100 ГБ |
| Средняя | 10-50 | 16-32 ГБ | SSD или NVMe, от 300 ГБ |
| Крупная | от 50 | 64 ГБ и больше | NVMe, отдельный том под данные |
Что проверить заранее:
- 🧱 Версия платформы 1С и поддерживаемая ею версия PostgreSQL.
- 🌐 Статический IP или стабильное имя сервера в сети.
- 🔥 Порты. PostgreSQL использует
5432. Сервер 1С:1540(агент),1541(менеджер кластера), диапазон1560-1591(рабочие процессы). - 💾 Отдельный диск или раздел под каталог данных. Если база вырастет, перенести его проще, чем растягивать системный том.
- 🔑 Лицензии: сервер 1С и клиентские лицензии должны быть готовы, иначе проверить подключение не получится.
Диск важнее процессора. База 1С в основном ждёт чтения и записи. SSD вместо HDD даёт больше, чем лишние ядра.
Установка сервера PostgreSQL на Windows и Linux
Windows
- Возьмите дистрибутив PostgreSQL для 1С. Он идёт отдельным архивом рядом с платформой или скачивается как сборка Postgres Pro для 1С.
- Запустите установщик от имени администратора.
- Выберите каталог данных. Лучше не на системный диск.
- Задайте пароль суперпользователя
postgres. Запишите его, он понадобится при создании базы. - Порт оставьте
5432, если он не занят. - Локаль выберите русскую. Кодировка базы будет UTF-8, это задаёт сама 1С при создании базы.
- После установки проверьте, что служба PostgreSQL запущена: оснастка «Службы», статус «Выполняется».
Linux (на примере Ubuntu/Debian)
Если у вас сборка в виде набора .deb-пакетов, ставьте их из каталога, где они лежат:
sudo apt update
sudo apt install ./postgresql-*.deb
Если используете репозиторий Postgres Pro, подключите его по инструкции производителя и поставьте нужную версию пакетом. Названия пакетов зависят от версии, поэтому сверяйтесь с описанием сборки.
После установки проверьте службу:
systemctl status postgresql
sudo -u postgres psql -c "select version();"
Вторая команда покажет версию сервера. Если она ответила, СУБД работает.
Не ставьте PostgreSQL «на всякий случай» двух версий на одну машину без нужды. Две службы с разными портами путают при обслуживании и легко приводят к тому, что 1С подключается не туда.
Кодировка, локаль и создание кластера баз данных
Кластер баз данных PostgreSQL это каталог данных плюс служба, которая его обслуживает. Не путайте с кластером серверов 1С: это другая сущность.
Установщик на Windows создаёт кластер сам. На Linux пакет обычно тоже инициализирует его при установке. Если нужно создать вручную или пересоздать, делайте так:
sudo -u postgres /usr/lib/postgresql/<версия>/bin/initdb \
-D /var/lib/postgresql/data --locale=ru_RU.UTF-8 --encoding=UTF8
Путь к initdb зависит от сборки, у Postgres Pro он другой. Проверьте через which initdb или поиск по /usr.
Что важно по кодировке:
- 🔤 Кодировка баз
UTF8. - 🌍 Локаль
ru_RU.UTF-8на Linux. На Windows сборка использует русскую локаль системы. - ⚙️ Если локаль не установлена в системе,
initdbвыдаст ошибку. На Ubuntu поставьте её командойsudo locale-gen ru_RU.UTF-8.
Сам кластер 1С создаёт базу данных внутри PostgreSQL и сама задаёт ей нужную кодировку. Руками создавать пустую базу в psql не требуется, если пользователь имеет право CREATEDB.
Пользователь для 1С и права доступа
Работать из-под postgres можно, но для боевой системы лучше завести отдельную роль. Ей достаточно права создавать базы.
CREATE ROLE user1c WITH LOGIN PASSWORD 'сложный_пароль' CREATEDB;
Пароль не используйте простой, он будет храниться в настройках кластера 1С.
Теперь нужно разрешить подключение с сервера 1С. Откройте два файла в каталоге данных.
postgresql.conf, параметр слушаемых адресов:
listen_addresses = '*'
Либо укажите конкретный IP сервера, это строже.
pg_hba.conf, добавьте строку для сети, где стоит сервер 1С:
host all user1c 192.168.1.0/24 md5
Адрес сети замените на свой. Метод md5 это проверка по паролю. Если ваша сборка по умолчанию использует scram-sha-256, тогда укажите его, и пароль роли создавайте уже после смены метода.
Применяйте изменения перезагрузкой конфигурации:
sudo systemctl reload postgresql
После смены listen_addresses нужен полный перезапуск: sudo systemctl restart postgresql.
Не открывайте порт 5432 в интернет. Закройте его межсетевым экраном и разрешите только адрес сервера 1С и админов. Открытая СУБД с паролем это приглашение к перебору.
Проверьте доступ с сервера 1С командой psql -h <адрес> -U user1c -d postgres. Если соединение прошло, сеть и права настроены верно.
Параметры производительности PostgreSQL для 1С
По умолчанию PostgreSQL настроен на скромное железо. Для 1С параметры нужно поднять. Ниже примерные значения для сервера с 16 ГБ памяти, под выделенную СУБД. Их стоит рассматривать как стартовую точку, а потом смотреть на реальную нагрузку.
| Параметр | Ориентир | Что делает |
|---|---|---|
shared_buffers | около 25% памяти, то есть 4 ГБ | Основной кеш данных |
effective_cache_size | 50-75% памяти, то есть 8-12 ГБ | Подсказка планировщику о доступном кеше ОС |
work_mem | 16-64 МБ | Память на сортировки и хеш-соединения в одном запросе |
maintenance_work_mem | 512 МБ-1 ГБ | Для VACUUM и построения индексов |
temp_buffers | 32-256 МБ | Временные таблицы, которых в 1С много |
max_connections | 100-200 | Достаточно, 1С держит соединения через рабочие процессы |
Для работы 1С нужно ещё отключить два параметра, которые влияют на обработку строк:
standard_conforming_strings = off
escape_string_warning = off
И полезно добавить:
- 🧹
autovacuum = onи не отключать его. Автоочистка нужна 1С, у неё много обновлений. - 📝
synchronous_commit = onна боевой базе. Отключение ускоряет запись, но при сбое можно потерять последние транзакции. - 🔒
fsync = on. Отключать только на тестовом стенде.
Пересчитайте work_mem на вашу ситуацию: он выделяется на каждую операцию в каждом запросе. Если одновременно работает 50 пользователей, а у каждого по нескольку сортировок, память расходуется быстро. 64 МБ на 100 соединений это уже до 6,4 ГБ в пике. Поэтому не ставьте значение «на глаз» в сотни мегабайт.
После правки postgresql.conf нужен перезапуск службы. Параметры, которые подхватываются на лету, помечены в документации как не требующие перезапуска, но проще перезапустить.
Создание информационной базы в консоли серверов 1С
Теперь подключаем базу. Предполагается, что сервер 1С:Предприятия уже установлен и служба ragent запущена.
- Откройте консоль администрирования серверов 1С (оснастка в составе платформы или веб-интерфейс, если вы его развернули).
- Добавьте сервер: укажите его имя и порт агента, обычно
1540. - Раскройте кластер и найдите узел «Информационные базы».
- Через правую кнопку выберите создание новой информационной базы.
- Заполните поля:
- Имя: так база будет видна пользователям в списке;
- Защищённое соединение: отключено, если вы не настраивали TLS;
- Тип СУБД: PostgreSQL;
- Сервер баз данных: адрес или имя машины с PostgreSQL, при нестандартном порте через двоеточие;
- База данных: имя базы в СУБД, латиницей без пробелов;
- Пользователь и пароль: роль, созданная выше;
- Смещение дат:
0для PostgreSQL; - флаг создания базы данных, если её ещё нет, поставьте.
- Подтвердите. 1С создаст базу в PostgreSQL и таблицы служебных данных.
После этого добавьте базу в список запуска. В клиенте 1С выберите добавление существующей базы, тип «На сервере 1С:Предприятия», укажите кластер и имя базы.
Загрузить данные можно из выгрузки .dt: в конфигураторе пункт загрузки информационной базы. Для большой базы операция идёт долго, поэтому запускайте её в тихое время.
Обслуживание и диагностика типовых проблем
PostgreSQL требует регулярного присмотра. Без него база распухает, а запросы замедляются.
Регулярные задачи
- 🧹 Автоочистка
autovacuumсправляется с текущей нагрузкой. Раз в неделю или раз в месяц делают ручнойVACUUM ANALYZE, чтобы обновить статистику планировщика. - 📦 Резервные копии делайте через
pg_dumpили средствами выгрузки 1С. Копировать файлы каталога данных при работающей службе нельзя: копия будет неконсистентной. - 🔁 Переиндексация: при сильном раздувании индексов помогает
REINDEX. Запускайте в нерабочее время. - 📊 Следите за свободным местом. Когда диск заполнен, PostgreSQL останавливается.
Пример выгрузки одной базы:
pg_dump -h localhost -U user1c -Fc -f /backup/base1c.dump base1c
Формат -Fc сжимает дамп, а восстанавливается он через pg_restore.
Типичные проблемы
CREATEDB. Выдайте его командой ALTER ROLE user1c CREATEDB; или создайте пустую базу вручную.listen_addresses оставлен на localhost. Проверьте службу, затем конфиг и сетевые правила.pg_hba.conf не подходит под адрес клиента. Проверьте строку и перезагрузите конфигурацию.VACUUM ANALYZE, посмотрите размер таблиц и свободное место на диске.work_mem при большом числе соединений. Уменьшите значение и пересчитайте под реальное число одновременных сессий.Если не помогло: другие варианты
Когда не получается ужиться с Linux или нет администратора, есть запасные пути:
- 🖥️ Поставить PostgreSQL на Windows-сервер с готовым установщиком. Меньше ручной работы, больше расход ресурсов.
- ☁️ Арендовать готовый сервер 1С у облачного провайдера. Администрирование СУБД тогда на нём.
- 📁 Остаться на файловом варианте, если пользователей мало (до 5-10) и нет требований к отказоустойчивости. Для небольшой базы он проще.
Если сомневаетесь, выбирайте по числу пользователей и размеру базы. Маленькой фирме с тремя бухгалтерами клиент-серверный режим даёт мало. Когда пользователей становится десяток и база растёт, переходить на него пора.
Частые вопросы
Можно ли использовать обычный PostgreSQL вместо сборки для 1С?
Какой порт нужно открыть для сервера 1С и PostgreSQL?
5432, для сервера 1С: 1540, 1541 и диапазон 1560-1591. Клиентам нужен доступ к портам 1С, СУБД им открывать не нужно.Нужно ли ставить PostgreSQL на тот же сервер, что и 1С?
Как перенести базу из MS SQL в PostgreSQL?
.dt из конфигуратора, создайте новую базу на PostgreSQL и загрузите выгрузку. Прямого переноса таблиц нет.