Как перенести базу PostgreSQL на другой диск в Windows, если служба не останавливается?

Системный администратор IT и автоматизация бизнеса
← На главную

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

Анализируем причину: почему служба остановлена, а БД работает

Разберем ситуацию, когда оснастка services.msc показывает, что служба PostgreSQL не запущена, но pgAdmin или консоль 1С подтверждают активную работу сервера. Проанализируем возможные причины:

  1. Ручной запуск процесса: PostgreSQL может быть запущен не как системная служба, а как обычное приложение или через скрипт автоматизации. В этом случае исполняемый файл postgres.exe работает в сессии пользователя или в фоновом режиме, но Service Control Manager (диспетчер служб) о нем «не знает».
  2. Несколько экземпляров СУБД: На сервере может быть установлено несколько версий PostgreSQL или несколько кластеров одной версии на разных портах. Вы могли остановить одну службу, в то время как рабочая база запущена под другой учетной записью или из другого каталога.
  3. Использование оберток или сторонних планировщиков: Иногда СУБД запускается через планировщик заданий Windows или сторонние утилиты мониторинга, которые восстанавливают процесс после его падения или ручной остановки.

Чтобы выяснить истинную причину, проанализируем список запущенных процессов. Откроем «Диспетчер задач», перейдем на вкладку «Подробности» и найдем все процессы postgres.exe. Нажав правой кнопкой мыши и выбрав «Открыть расположение файла», мы точно узнаем, из какой папки запущен текущий экземпляр базы данных.

Шаг 1. Правильная остановка сервера с помощью pg_ctl

Если штатные средства управления службами 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 исчезли из диспетчера задач. Только после этого можно приступать к манипуляциям с файлами.

Шаг 2. Перенос данных на другой диск

После полной остановки сервера проанализируем два основных способа переноса папки data на новый носитель.

Способ А: Редактирование путей в реестре или параметрах службы

  1. Скопируем папку data на новый диск (например, в D:\PostgreSQL\data).
  2. Откроем редактор реестра regedit.
  3. Перейдем в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-9.6 (название может отличаться в зависимости от версии).
  4. Найдем параметр ImagePath и изменим путь после ключа -D на новый адрес папки данных.

Способ Б: Использование символических ссылок (Junction points)

Этот метод более изящен, так как позволяет не менять настройки службы. Система будет думать, что файлы лежат на старом месте, хотя фактически они будут находиться на новом диске.

  1. Переместим папку data на новый диск.
  2. В старом расположении папки (где она была изначально) создадим символическую ссылку с помощью команды mklink:

mklink /J "C:\Program Files\PostgreSQL\9.6\data" "D:\PostgreSQL\data"

Теперь при обращении к диску C система автоматически перенаправит запрос на диск D.

Шаг 3. Настройка прав доступа — критический момент

Разберем одну из самых частых ошибок: после переноса файлов служба PostgreSQL отказывается запускаться с ошибкой «Access is denied» (Отказано в доступе). Это происходит потому, что при копировании файлов на новый диск права NTFS могут не наследоваться корректно.

Проанализируем необходимые действия по настройке прав:

  1. Нажмем правой кнопкой на новую папку data, выберем «Свойства» — «Безопасность».
  2. Добавим пользователя, от имени которого запускается служба PostgreSQL. Обычно это специальный технический пользователь postgres или системная учетная запись NetworkService.
  3. Предоставим этому пользователю Полный доступ (Full Control) к папке и всем вложенным объектам.

Шаг 4. Запуск и проверка

После настройки прав и путей запустим сервер обратно. Мы можем сделать это либо через оснастку служб (если мы правили реестр), либо снова через pg_ctl:

pg_ctl start -D "D:\PostgreSQL\data"

Если запуск прошел успешно, проверим логи сервера (находятся в подпапке pg_log внутри каталога data), чтобы убедиться в отсутствии ошибок инициализации.

Особенности версий PostgreSQL для 1С:Предприятие

В процессе обсуждения часто возникает вопрос о выборе правильной сборки СУБД. Выясним основные различия, которые влияют на производительность и стабильность работы 1С:

Важное замечание по версии 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С.

← На главную