Как установить и настроить второй экземпляр PostgreSQL на Windows для работы с 1С?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие администраторы 1С, переходящие с Microsoft SQL Server на PostgreSQL, сталкиваются с архитектурными различиями этих СУБД. В MS SQL Server создание нового "именованного экземпляра" (Named Instance) — это тривиальная задача, решаемая галочкой в инсталляторе. В PostgreSQL, особенно на ОС Windows, этот процесс требует более глубокого понимания работы службы и инициализации кластера данных.

В этой статье мы подробно разберем, как развернуть второй независимый экземпляр PostgreSQL на одном сервере Windows, зарегистрировать его как службу, настроить порты и права доступа, а также избежать распространенных ошибок при подключении платформы 1С:Предприятие.

1. Понимание архитектуры: Кластер базы данных

Прежде чем приступать к практическим действиям, давайте проясним терминологию. То, что мы привыкли называть "экземпляром" (Instance) в MS SQL, в мире PostgreSQL называется "кластером базы данных" (Database Cluster). Это совокупность баз данных, управляемых одним работающим экземпляром сервера, что является частью концепции защищенной IT инфраструктуры.

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

2. Инициализация нового кластера (initdb)

Для создания нового экземпляра нам потребуется утилита initdb, которая входит в состав бинарных файлов PostgreSQL. Предположим, что бинарные файлы у вас уже установлены (например, в C:\Program Files\PostgreSQL\16\bin), и нам нужно создать новый кластер в папке C:\Data\PostgresInstance2.

Откроем командную строку (CMD или PowerShell) от имени администратора и перейдем к шагу инициализации.

Типичная команда, которую мы рассмотрим, выглядит так:


"C:\Program Files\PostgreSQL\16\bin\initdb.exe" -D "C:\Data\PostgresInstance2" -U postgres -W -A md5 --locale=ru_RU

Давайте подробно разберем каждый параметр, так как ошибки здесь приводят к проблемам с доступом в дальнейшем:

  1. -D "Путь": Указывает директорию, где будут лежать данные нового кластера. Эта папка должна быть пустой.
  2. -U postgres: Это критически важный параметр. Если его не указать (как часто бывает по ошибке), PostgreSQL назначит суперпользователем имя текущего пользователя Windows, под которым запущена консоль (например, "Administrator" или "Ivanov"). В дальнейшем, пытаясь подключиться под стандартным логином "postgres", вы получите ошибку FATAL: password authentication failed for user "postgres", так как такого пользователя просто не существует в этом кластере. Мы явно указываем имя суперпользователя.
  3. -W: Заставляет утилиту запросить пароль для нового суперпользователя сразу после запуска.
  4. -A md5 (или scram-sha-256): Метод аутентификации. Для совместимости со старыми версиями 1С часто используют md5, для новых — scram-sha-256.
  5. --locale=ru_RU: Обязательный параметр для корректной работы 1С с кириллицей. Если инициализировать базу с локалью по умолчанию (которая может оказаться английской в системе), при создании базы из консоли 1С вы можете получить ошибки сортировки или ошибку lc_collate.

3. Настройка конфигурационных файлов

После успешной инициализации (вы увидите сообщение "Success"), новый кластер создан, но еще не запущен. Нам нужно изменить порт, так как стандартный порт 5432, скорее всего, занят первым экземпляром. Для дальнейшей оптимизации структуры может пригодиться генератор скрипта для индексации таблиц.

Перейдем в папку данных C:\Data\PostgresInstance2 и откроем файл postgresql.conf любым текстовым редактором.

Найдем и изменим параметр port:


port = 5433  # Используем любой свободный порт
listen_addresses = '*' # Разрешаем подключения с любых адресов, если сервер не только локальный

Здесь же можно настроить параметры производительности (shared_buffers, effective_cache_size и т.д.) индивидуально для этого экземпляра. Чтобы понять, какие значения выставить, полезно анализировать SQL сервер глазами 1С-ника.

4. Регистрация службы Windows

Чтобы наш новый PostgreSQL запускался автоматически вместе с Windows и работал в фоне, нам нужно зарегистрировать его как службу. Для этого используем утилиту pg_ctl.

В командной строке выполним:


"C:\Program Files\PostgreSQL\16\bin\pg_ctl.exe" register -N "postgresql-5433" -D "C:\Data\PostgresInstance2" -S auto

Разберем параметры:

После этого можно запустить службу через оснастку "Службы" или командой net start postgresql-5433.

5. Ошибки совместимости с 1С (lc_collate)

При попытке создать информационную базу через консоль серверов 1С на новом экземпляре PostgreSQL (особенно версий 15 и 16) вы можете столкнуться с ошибкой:

ERROR: unrecognized configuration parameter "lc_collate"

Давайте проанализируем причины. Начиная с 15-й версии, PostgreSQL ужесточил политику работы с локалями. Параметры lc_collate и lc_ctype стали глобальными атрибутами базы данных, доступными только для чтения после создания. Старые версии платформы 1С пытаются установить эти параметры в сессии, что вызывает ошибку.

Решение:

  1. Использовать актуальную версию платформы 1С. Для PostgreSQL 16 рекомендуется использовать платформу не ниже 8.3.22.2501, 8.3.23.2144 или 8.3.24.1528. В этих версиях взаимодействие с СУБД скорректировано.
  2. Убедиться, что при инициализации кластера (шаг 2) вы использовали флаг --locale=ru_RU. Если локаль системы отличается от русской, 1С не сможет корректно работать со строковыми данными без этой настройки.

6. Разграничение доступа к базам данных

В MS SQL Server принята модель, где логины (Login) создаются на уровне сервера, а пользователи (User) — на уровне базы, и их нужно явно связывать. В PostgreSQL модель немного иная: роль (Role) может быть и пользователем, и группой, и она глобальна для всего кластера.

Часто возникает вопрос: "Как запретить пользователю видеть и подключаться к чужим базам?". По умолчанию, если у пользователя есть право CONNECT, он может попытаться подключиться к любой базе (хотя читать таблицы внутри без грантов не сможет).

Для жесткого разграничения доступа ("Фейс-контроль") в PostgreSQL используется файл pg_hba.conf, находящийся в папке данных кластера. Это мощнейший инструмент сетевой безопасности.

Рассмотрим пример настройки, когда пользователю user_upp разрешено подключаться только к базе upp, а пользователю user_zup — только к zup.

Откроем pg_hba.conf и добавим записи в начало списка (правила применяются сверху вниз до первого совпадения!):


# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    upp             user_upp        0.0.0.0/0               md5
host    zup             user_zup        0.0.0.0/0               md5

Если после этих строк не будет разрешающих правил типа host all all ..., то user_upp физически не сможет пройти аутентификацию при попытке входа в базу zup. Это надежный способ изоляции.

Кроме того, внутри базы можно управлять правами через SQL-команды. По умолчанию роль PUBLIC имеет право на подключение. Чтобы сделать систему закрытой, выполните:


REVOKE CONNECT ON DATABASE zup FROM PUBLIC;
GRANT CONNECT ON DATABASE zup TO user_zup;

7. Резервное копирование пользователей

Важно помнить, что обычный бэкап базы данных (через pg_dump или выгрузку dt в 1С) не содержит информации о пользователях (ролях), так как они являются глобальными объектами кластера.

Если вы переносите базы на другой сервер, вам нужно отдельно перенести пользователей. Для этого используем утилиту pg_dumpall с ключом --globals-only (или -g).


"C:\Program Files\PostgreSQL\16\bin\pg_dumpall.exe" -g -U postgres > C:\Backup\users_globals.sql

Этот файл позволит восстановить всех пользователей и их пароли на чистом экземпляре PostgreSQL перед загрузкой самих баз данных.

Заключение

Мы рассмотрели процесс создания второго экземпляра PostgreSQL на Windows. Основные шаги успеха — это корректная инициализация через initdb с указанием суперпользователя и локали, регистрация отдельной службы с уникальным портом и правильная настройка pg_hba.conf. Такой подход позволяет гибко управлять ресурсами сервера, разделяя базы данных разработки и продуктива, или разные версии платформы 1С.

← На главную