Переход с Microsoft SQL Server на PostgreSQL для баз 1С:Предприятие — это не просто смена СУБД, а стратегическое решение, которое может сэкономить лицензионные затраты и улучшить производительность системы. Однако многие администраторы сталкиваются с трудностями на этапе первоначальной настройки: от выбора совместимой версии PostgreSQL до конфигурирования кластера для работы с . Эта статья поможет избежать типичных ошибок и развернуть базу данных корректно с первого раза.

Почему именно PostgreSQL? Во-первых, это бесплатная СУБД с открытым исходным кодом, которая поддерживается начиная с версии платформы 8.3.10. Во-вторых, она демонстрирует высокую стабильность при работе с большими объемами данных и сложными транзакциями. Но есть нюансы: не все конфигурации одинаково хорошо работают с PostgreSQL, а настройка сервера требует знаний, выходящих за рамки стандартного администрирования .

В этом руководстве мы разберём весь процесс — от подготовки сервера до первой успешной синхронизации данных. Особое внимание уделим критическим параметрам конфигурации, которые напрямую влияют на скорость работы базы, а также типичным ошибкам, с которыми сталкиваются новички.

1. Требования к серверу и выбор версии PostgreSQL

Прежде чем приступать к установке, убедитесь, что ваш сервер соответствует минимальным требованиям для развертывания на PostgreSQL. Это избавит от проблем с производительностью или совместимостью на поздних этапах.

Официально 1С:Предприятие поддерживает PostgreSQL начиная с версии 9.6, но для новых проектов рекомендуется использовать версии 12–16, так как они оптимизированы для работы с современными конфигурациями (например, 1С:ERP или 1С:Управление холдингом). Важно: версия PostgreSQL должна быть строго совместима с версией платформы 1С. Например, платформа 8.3.20 не поддерживает PostgreSQL 16 — проверьте матрицу совместимости в документации .

Требования к аппаратной части:

  • 🖥️ Процессор: не менее 4 ядер (рекомендуется 8+ для средних и крупных баз).
  • 💾 ОЗУ: от 8 ГБ (для тестовых сред) до 32 ГБ и выше (для производственных баз с 50+ пользователями).
  • 📀 Дисковое пространство: SSD-накопитель объемом не менее 100 ГБ (для базы + резервные копии).
  • 🌐 Сеть: стабильное подключение с пропускной способностью от 1 Гбит/с (для работы по сети).

Также убедитесь, что на сервере установлена одна из поддерживаемых ОС: Windows Server 2016/2019/2022 или Linux (например, Ubuntu 20.04 LTS, CentOS 7/8). Для Linux потребуются дополнительные пакеты, такие как libpq-dev и postgresql-contrib.

📊 Какую ОС вы используете для развертывания PostgreSQL?
Windows Server
Linux (Ubuntu/CentOS)
Linux (Debian)
Другой вариант

2. Установка и базовая настройка PostgreSQL

Процесс установки PostgreSQL отличается в зависимости от операционной системы. Рассмотрим оба варианта: для Windows и Linux.

Для Windows:

  1. Скачайте установочный пакет с официального сайта (выберите версию, совместимую с вашей платформой ).
  2. Запустите установщик и следуйте инструкциям. На этапе выбора компонентов обязательно отметьте:
    • 📌 PostgreSQL Server (основной компонент).
    • 📌 pgAdmin (графический интерфейс для управления).
    • 📌 Command Line Tools (утилиты для работы через консоль).
  3. При настройке кластера укажите порт 5432 (по умолчанию) и выберите локаль Russian_Russia.1251 или C (для совместимости с ).
  4. Задайте пароль для пользователя postgres (запомните его — он потребуется для подключения из ).
  5. Для Linux (Ubuntu/Debian):

    # Добавление репозитория PostgreSQL
    

    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

    sudo apt-get update

    Установка PostgreSQL 14 (пример для совместимой версии)

    sudo apt-get -y install postgresql-14 postgresql-contrib

    После установки проверьте статус службы:

    sudo systemctl status postgresql

    Если служба активна, можно приступать к настройке. Важно: по умолчанию PostgreSQL в Linux использует peer-аутентификацию для локальных подключений. Для работы с необходимо изменить метод аутентификации на md5 в файле pg_hba.conf (расположен в /etc/postgresql/14/main/).

    💡

    Перед изменением конфигурационных файлов PostgreSQL всегда делайте их резервные копии. Это поможет быстро восстановить работоспособность при ошибке.

    3. Создание пользователя и базы данных для 1С

    Для работы 1С:Предприятие требуется отдельный пользователь базы данных с правами на создание объектов. Использовать суперпользователя postgres не рекомендуется по соображениям безопасности.

    Подключитесь к PostgreSQL через консоль или pgAdmin и выполните следующие команды:

    -- Создание пользователя для 1С (замените пароль на свой)
    

    CREATE USER usr_1c WITH PASSWORD 'ВашСложныйПароль123' CREATEDB;

    -- Создание базы данных с владельцем usr_1c

    CREATE DATABASE db_1c WITH OWNER = usr_1c ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TEMPLATE = template0;

    Обратите внимание на параметры:

    • 🔠 Кодировка: UTF8 — обязательна для корректной работы с кириллицей.
    • 🌍 Локаль: ru_RU.UTF-8 — обеспечивает правильную сортировку и сравнение строк.
    • 📝 Шаблон: template0 — позволяет задать собственную кодировку (в отличие от template1).

    После создания базы необходимо настроить права. Выполните:

    GRANT ALL PRIVILEGES ON DATABASE db_1c TO usr_1c;

    Теперь база готова для подключения из . Но перед этим рекомендуется оптимизировать параметры PostgreSQL для работы с , так как стандартные настройки рассчитаны на универсальное использование.

    ☑️ Подготовка PostgreSQL для 1С

    Выполнено: 0 / 4

    4. Оптимизация параметров PostgreSQL для 1С

    По умолчанию PostgreSQL настроен на универсальную нагрузку, но для требуется тонкая подстройка, особенно если база будет использоваться более чем 10 пользователями одновременно. Основные параметры настройки находятся в файле postgresql.conf.

    Ключевые параметры для оптимизации:

    Параметр Рекомендуемое значение Описание
    shared_buffers 25% от общей ОЗУ (но не более 8 ГБ) Объём памяти, выделяемый для кэширования данных.
    work_mem 16–64 МБ Память для сложных операций (сортировка, объединения).
    maintenance_work_mem 512 МБ – 1 ГБ Память для операций обслуживания (VAACUUM, CREATE INDEX).
    effective_cache_size 50–75% от общей ОЗУ Оценка объёма кэша (влияет на планировщик запросов).
    max_connections 100–200 Максимальное количество подключений (зависит от числа пользователей).

    Пример настройки для сервера с 16 ГБ ОЗУ и 20 пользователями:

    shared_buffers = 4GB
    

    work_mem = 32MB

    maintenance_work_mem = 1GB

    effective_cache_size = 12GB

    max_connections = 100

    После изменения параметров перезапустите службу PostgreSQL:

    • 🪟 Windows: через Службы или команду net stop postgresql-x64-14 & net start postgresql-x64-14.
    • 🐧 Linux: sudo systemctl restart postgresql.
    💡

    Не устанавливайте shared_buffers более 8 ГБ — это может привести к деградации производительности из-за особенностей работы ядра PostgreSQL.

    Также рекомендуется включить автоочистку (autovacuum) для предотвращения разрастания таблиц:

    autovacuum = on
    

    autovacuum_vacuum_scale_factor = 0.05

    autovacuum_analyze_scale_factor = 0.02

    5. Подключение базы 1С к PostgreSQL

    Теперь, когда PostgreSQL настроен, можно создать информационную базу в 1С:Предприятие и подключить её к серверу. Для этого:

    1. Запустите 1С:Предприятие в режиме Конфигуратор.
    2. Выберите Файл → Новая информационная база.
    3. Укажите тип базы: Серверная (клиент-серверный вариант).
    4. В поле Сервер баз данных выберите PostgreSQL.
    5. Заполните параметры подключения:
      • 📌 Имя сервера: IP или имя хоста (например, localhost или 192.168.1.100).
      • 📌 Порт: 5432 (по умолчанию).
      • 📌 Имя базы данных: db_1c (созданная ранее).
      • 📌 Имя пользователя: usr_1c.
      • 📌 Пароль: указанный при создании пользователя.
    6. Нажмите Готово и дождитесь создания базы.
    7. Если подключение прошло успешно, вы увидите новую базу в списке. Однако на этом этапе могут возникнуть ошибки, связанные с:

      • Неправильными правами пользователя (проверьте GRANT в PostgreSQL).
      • Несовместимой кодировкой (убедитесь, что база создана с UTF8).
      • Блокировкой порта фаерволом (откройте порт 5432 в настройках сети).

    Для проверки соединения можно использовать утилиту psql:

    psql -h localhost -p 5432 -U usr_1c -d db_1c
    Что делать, если 1С не видит PostgreSQL?

    1. Проверьте, запущена ли служба PostgreSQL (sudo systemctl status postgresql).

    2. Убедитесь, что в pg_hba.conf разрешено подключение по сети (замените 127.0.0.1/32 на 0.0.0.0/0 для теста, но не оставляйте так на производстве!).

    3. Проверьте, что порт 5432 не заблокирован фаерволом (sudo ufw allow 5432 для Ubuntu).

    4. Если используется Docker, убедитесь, что контейнер с PostgreSQL имеет правильные настройки сети.

    6. Миграция данных из MS SQL в PostgreSQL

    Если вы переносите существующую базу с Microsoft SQL Server, потребуется миграция данных. Для этого предоставляет встроенные инструменты, но процесс имеет нюансы.

    Пошаговая инструкция:

    1. Создайте резервную копию базы на MS SQL через Конфигуратор → Администрирование → Выгрузить информационную базу.
    2. В PostgreSQL создайте пустую базу (как описано в разделе 3).
    3. В выберите Администрирование → Загрузить информационную базу и укажите файл резервной копии.
    4. При загрузке выберите PostgreSQL как целевую СУБД и укажите параметры подключения.

    Возможные проблемы при миграции:

    • 🔄 Несовпадение типов данных: в PostgreSQL нет прямого аналога NVARCHAR из MS SQL. автоматически преобразует их, но могут возникнуть ошибки с символами.
    • 🔄 Размер полей: если в MS SQL использовались поля с фиксированной длиной (например, CHAR(10)), в PostgreSQL они превратятся в VARCHAR, что может повлиять на логику работы отчётов.
    • 🔄 Триггеры и хранимые процедуры: не переносит их автоматически — потребуется ручное воспроизведение логики.

    Для крупных баз (более 50 ГБ) рекомендуется использовать утилиту pgloader, которая позволяет тонко настроить процесс миграции:

    pgloader mssql://user:password@sql-server/database postgresql://usr_1c:password@localhost/db_1c
    💡

    Перед миграцией отключите всех пользователей от базы и выполните тестовое подключение к PostgreSQL с минимальным набором данных. Это поможет выявить проблемы до переноса основной базы.

    7. Мониторинг и обслуживание базы

    После развертывания важно настроить регулярный мониторинг и обслуживание PostgreSQL, чтобы предотвратить падение производительности. Основные задачи:

    1. Резервное копирование

    Используйте утилиту pg_dump для создания резервных копий:

    pg_dump -h localhost -p 5432 -U usr_1c -F c -b -v -f backup_1c.dump db_1c

    Для автоматического резервирования настройте cron (Linux) или Задачи Windows:

    0 2   * /usr/bin/pg_dump -U usr_1c db_1c > /backups/db_1c_$(date +\%Y-\%m-\%d).sql

    2. Очистка и оптимизация

    Регулярно выполняйте VACUUM ANALYZE для освобождения места и обновления статистики:

    VACUUM (VERBOSE, ANALYZE) db_1c;

    3. Мониторинг производительности

    Используйте системные представления PostgreSQL для анализа нагрузки:

    -- Топ-10 самых долгих запросов
    

    SELECT query, total_time, calls, mean_time

    FROM pg_stat_statements

    ORDER BY mean_time DESC

    LIMIT 10;

    Для визуализации можно подключить Grafana с плагином для PostgreSQL или использовать pgAdmin.

    4. Обновление PostgreSQL

    Перед обновлением версии PostgreSQL:

    1. Создайте полную резервную копию базы.
    2. Проверьте совместимость новой версии с вашей платформой .
    3. Используйте утилиту pg_upgrade для миграции между мажорными версиями.
    💡

    Не обновляйте PostgreSQL "на живую" базу — всегда тестируйте новую версию на копии производственной среды.

    8. Типичные ошибки и их решение

    Даже при правильной настройке могут возникать ошибки. Рассмотрим самые распространённые и способы их устранения.

    Ошибка 1: "Не удалось подключиться к информационной базе"

    Причины:

    • ❌ Неверные учётные данные (проверьте имя пользователя и пароль).
    • ❌ Порт 5432 заблокирован (проверьте фаервол или антивирус).
    • ❌ Служба PostgreSQL не запущена (проверьте статус службы).

    Ошибка 2: "Ошибка кодировки символов"

    Решение:

    • Убедитесь, что база создана с кодировкой UTF8.
    • Проверьте настройки локали в postgresql.conf:
    lc_messages = 'ru_RU.UTF-8'
    

    lc_monetary = 'ru_RU.UTF-8'

    lc_numeric = 'ru_RU.UTF-8'

    lc_time = 'ru_RU.UTF-8'

    Ошибка 3: Медленная работа базы

    Возможные причины и решения:

    Проблема Решение
    Недостаточно shared_buffers Увеличьте значение до 25% от ОЗУ.
    Отсутствие индексов Проверьте планы запросов через EXPLAIN ANALYZE.
    Блокировки транзакций Используйте SELECT * FROM pg_locks; для анализа.
    Фрагментация таблиц Выполните VACUUM FULL.

    Ошибка 4: "Недостаточно прав для операции"

    Решение:

    -- Предоставьте пользователю все права на схему
    

    GRANT ALL ON SCHEMA public TO usr_1c;

    Как проверить блокировки в PostgreSQL?

    Выполните запрос:

    SELECT blocked_locks.pid AS blocked_pid,
    

    blocked_activity.usename AS blocked_user,

    blocking_locks.pid AS blocking_pid,

    blocking_activity.usename AS blocking_user,

    blocked_activity.query AS blocked_statement

    FROM pg_catalog.pg_locks blocked_locks

    JOIN pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid

    JOIN pg_catalog.pg_locks blocking_locks

    ON blocking_locks.locktype = blocked_locks.locktype

    AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE

    AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation

    AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page

    AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple

    AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid

    AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid

    AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid

    AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid

    AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid

    AND blocking_locks.pid != blocked_locks.pid

    JOIN pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid

    WHERE NOT blocked_locks.GRANTED;

    Этот запрос покажет, какие транзакции блокируют другие, и поможет идентифицировать проблему.

    FAQ: Частые вопросы по работе 1С с PostgreSQL

    Можно ли использовать PostgreSQL для 1С:Бухгалтерии?

    Да, 1С:Бухгалтерия полностью поддерживает PostgreSQL начиная с версии платформы 8.3.10. Однако для корректной работы необходимо:

    • Использовать совместимую версию PostgreSQL (см. матрицу совместимости на сайте ).
    • Настроить кодировку UTF8 и локаль ru_RU.UTF-8.
    • Проверять производительность при большом количестве документов (например, более 100 000 в месяц).
    Как перенести базу с PostgreSQL обратно на MS SQL?

    Для обратной миграции:

    1. Создайте резервную копию базы в PostgreSQL через pg_dump.
    2. В создайте новую базу на MS SQL.
    3. Используйте утилиту pgloader для переноса данных в обратном направлении:
    pgloader postgresql://usr_1c:password@localhost/db_1c mssql://user:password@sql-server/database

    Или загрузите данные через Конфигуратор 1С (меню Администрирование → Загрузить информационную базу).

    Почему 1С тормозит после перехода на PostgreSQL?

    Частые причины:

    • 🐢 Недостаточные ресурсы сервера (проверьте shared_buffers и work_mem).
    • 🐢 Отсутствие индексовPostgreSQL индексы создаются иначе, чем в MS SQL).
    • 🐢 Блокировки (используйте SELECT * FROM pg_locks; для диагностики).
    • 🐢 Неоптимизированные запросы (включите логирование медленных запросов в postgresql.conf).

    Рекомендации:

    • Выполните ANALYZE для обновления статистики.
    • Проверьте настройки random_page_cost (для SSD установите значение 1.1–1.3).
    • Отключите ненужные расширения в (например, полнотекстовый поиск, если он не используется).
    Как настроить репликацию PostgreSQL для 1С?

    Для настройки репликации:

    1. На главном сервере (master) отредактируйте postgresql.conf:
    wal_level = replica
    

    max_wal_senders = 3

    wal_keep_segments = 8

    1. В файле pg_hba.conf добавьте строку для репликации:
    host replication usr_replica 192.168.1.101/32 md5
    1. На резервном сервере (slave) выполните:
    pg_basebackup -h 192.168.1.100 -U usr_replica -D /var/lib/postgresql/14/main -P
    1. Создайте файл recovery.conf на резервном сервере:
    standby_mode = 'on'
    

    primary_conninfo = 'host=192.168.1.100 port=5432 user=usr_replica password=ВашПароль'

    1. Запустите PostgreSQL на резервном сервере.

    Для настройте подключение к master-серверу. В случае его падения вручную переключитесь на slave (автоматическое переключение требует дополнительных инструментов, например, Patroni).

    Какие есть альтернативы PostgreSQL для 1С?

    Помимо PostgreSQL, 1С:Предприятие поддерживает:

    • 🖥️ Microsoft SQL Server