В процессе эксплуатации 1С:Предприятие на платформе PostgreSQL под управлением ОС Windows системные администраторы часто сталкиваются с необходимостью переноса данных на другой физический диск или раздел. Типичный алгоритм кажется простым: остановить службу, скопировать файлы, поправить пути. Однако на практике возникают ситуации, когда стандартная служба Windows отображается как «Остановлена», но база данных продолжает функционировать, а пользователи не замечают никаких изменений. Рассмотрим детально, почему так происходит и как правильно выполнить перенос базы данных в таких условиях. Для обеспечения сохранности данных перед любыми техническими операциями на сервере можно автоматизировать архивирование и обслуживание всех баз 1С.
Разберем ситуацию, когда оснастка services.msc показывает, что служба PostgreSQL не запущена, но pgAdmin или консоль 1С подтверждают активную работу сервера. Проанализируем возможные причины:
postgres.exe работает в сессии пользователя или в фоновом режиме, но Service Control Manager (диспетчер служб) о нем «не знает».Чтобы выяснить истинную причину, проанализируем список запущенных процессов. Откроем «Диспетчер задач», перейдем на вкладку «Подробности» и найдем все процессы postgres.exe. Нажав правой кнопкой мыши и выбрав «Открыть расположение файла», мы точно узнаем, из какой папки запущен текущий экземпляр базы данных.
Если штатные средства управления службами Windows не справляются, воспользуемся специализированной утилитой pg_ctl.exe, которая входит в комплект поставки PostgreSQL. Это наиболее надежный способ управления демоном (процессом) сервера.
Важное условие: все команды необходимо выполнять в командной строке (CMD) или PowerShell, запущенных от имени администратора. Даже если ваш текущий пользователь обладает правами администратора, явный запуск «от имени администратора» необходим для корректного взаимодействия с системными процессами.
Рассмотрим последовательность действий для остановки сервера:
1. Сначала проверим текущий статус сервера, чтобы убедиться, что мы обращаемся к нужному каталогу данных:
pg_ctl status -D "C:\Program Files\PostgreSQL\9.6\data"
2. Если сервер запущен, выполним команду остановки. Параметр -m fast (fast shutdown) позволяет быстро закрыть все активные соединения и корректно завершить работу:
pg_ctl stop -D "C:\Program Files\PostgreSQL\9.6\data" -m fast
3. Убедимся, что процессы postgres.exe исчезли из диспетчера задач. Только после этого можно приступать к манипуляциям с файлами.
После полной остановки сервера проанализируем два основных способа переноса папки data на новый носитель.
Способ А: Редактирование путей в реестре или параметрах службы
data на новый диск (например, в D:\PostgreSQL\data).regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-9.6 (название может отличаться в зависимости от версии).ImagePath и изменим путь после ключа -D на новый адрес папки данных.Способ Б: Использование символических ссылок (Junction points)
Этот метод более изящен, так как позволяет не менять настройки службы. Система будет думать, что файлы лежат на старом месте, хотя фактически они будут находиться на новом диске.
data на новый диск.mklink:
mklink /J "C:\Program Files\PostgreSQL\9.6\data" "D:\PostgreSQL\data"
Теперь при обращении к диску C система автоматически перенаправит запрос на диск D.
Разберем одну из самых частых ошибок: после переноса файлов служба PostgreSQL отказывается запускаться с ошибкой «Access is denied» (Отказано в доступе). Это происходит потому, что при копировании файлов на новый диск права NTFS могут не наследоваться корректно.
Проанализируем необходимые действия по настройке прав:
data, выберем «Свойства» — «Безопасность».postgres или системная учетная запись NetworkService.После настройки прав и путей запустим сервер обратно. Мы можем сделать это либо через оснастку служб (если мы правили реестр), либо снова через pg_ctl:
pg_ctl start -D "D:\PostgreSQL\data"
Если запуск прошел успешно, проверим логи сервера (находятся в подпапке pg_log внутри каталога data), чтобы убедиться в отсутствии ошибок инициализации.
В процессе обсуждения часто возникает вопрос о выборе правильной сборки СУБД. Выясним основные различия, которые влияют на производительность и стабильность работы 1С:
Standard версия часто используется как альтернатива бесплатным сборкам, обладая лучшей поддержкой новых процессоров и оптимизированными алгоритмами. Enterprise версия является платной и включает продвинутые функции (инкрементальный бэкап, продвинутый планировщик), что актуально для очень крупных баз данных.Важное замечание по версии 9.6: Если вы используете связку Windows Server 2008 и PostgreSQL 9.6, помните, что поддержка обеих систем официально прекращена. Рассмотрим возможность планового обновления до актуальных версий (например, PostgreSQL 12 или 13), так как они показывают значительно лучшую производительность в многопользовательском режиме 1С на современных серверных мощностях.
Если вы перенесли базу с медленного HDD на быстрый SSD, проанализируем параметры файла postgresql.conf. Чтобы база начала работать быстрее, рекомендуется изменить значения random_page_cost (уменьшить до 1.1) и effective_io_concurrency (увеличить до 200), чтобы планировщик запросов учитывал высокую скорость дисковой подсистемы.
Таким образом, комбинируя использование утилиты pg_ctl, правильную настройку прав доступа NTFS и, при необходимости, механизм символических ссылок, мы можем гарантированно и безопасно переместить критически важные данные на новый накопитель, обеспечив стабильную работу системы 1С:Предприятие. Для последующего администрирования и контроля СУБД без использования pgAdmin можно применять инструмент для обслуживания баз данных на PostgreSQL из интерфейса 1С.