Как настроить автоматическое создание бекапа PostgreSQL без запроса пароля?

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

При настройке автоматического резервного копирования баз данных PostgreSQL с помощью консольной утилиты pg_dump.exe часто возникает проблема: утилита останавливает выполнение скрипта и запрашивает ввод пароля пользователя СУБД. Это делает невозможным запуск копирования по расписанию через Планировщик задач (Task Scheduler) Windows. Рассмотрим подробнее, как обойти этот запрос и передать авторизационные данные автоматически.

Способ 1. Использование переменных окружения в CMD/BAT скрипте

Разберем наиболее простой и распространенный способ решения задачи. Перед вызовом утилиты pg_dump.exe в командном файле можно задать переменные окружения PGUSER и PGPASSWORD. Сессионные переменные считываются консольным клиентом PostgreSQL автоматически, благодаря чему окно ввода пароля не появляется.

Посмотрим на пример командного файла (backup.cmd):


SET PGUSER=postgres
SET PGPASSWORD=ВашПароль
"C:\Program Files\PostgreSQL\9.6.3-3.1C\bin\pg_dump.exe" -h localhost -p 5432 -U postgres -F c -b -v -f "D:\Backup\PG\Buh_baza_%DATE%.backup" Buh_baza

В данном примере применяются важные параметры утилиты pg_dump:

  1. -F c — указывает пользовательский кастомный формат хранилища (Custom format), который поддерживает сжатие и последующее многопоточное восстановление утилитой pg_restore.
  2. -b — включает выгрузку больших объектов (Blobs) в дамп.
  3. -v — выводит подробную информацию о ходе выполнения процесса (Verbose mode).
  4. -f — указывает полный путь к выгружаемому файлу вместо использования перенаправления вывода >.

Обратите внимание на безопасность: хранение открытого пароля в файлах скриптов несет риски безопасности, так как пароль может быть прочитан сторонними пользователями системы или отображен в списке процессов.

Способ 2. Использование файла авторизации pgpass.conf

Для более безопасного хранения учетных данных в ОС Windows целесообразно использовать специальный файл конфигурации паролей. PostgreSQL умеет автоматически искать учетные данные в файле pgpass.conf, расположенном в каталоге профиля пользователя.

Выясним, как правильно создать и настроить данный файл:

  1. Перейдем в служебную папку учетной записи, под которой запускается скрипт бекапа: %APPDATA%\postgresql\ (например, C:\Users\Administrator\AppData\Roaming\postgresql\).
  2. Создадим текстовый файл с именем pgpass.conf.
  3. Добавим в файл строку авторизации в следующем формате:

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

Пример содержимого файла для локального сервера:

localhost:5432:Buh_baza:postgres:МойНадежныйПароль

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

localhost:5432:*:postgres:МойНадежныйПароль

При запуске резервного копирования от имени службы или через системную учетную запись (SYSTEM) стандартный путь %APPDATA% может быть недоступен. В таком случае в самом скрипте зададим путь к файлу паролей с помощью переменной PGPASSFILE:


SET PGPASSFILE=C:\scripts\pgpass.conf
"C:\Program Files\PostgreSQL\9.6.3-3.1C\bin\pg_dump.exe" -h localhost -p 5432 -U postgres -F c -f "D:\Backup\Buh_baza.backup" Buh_baza

Альтернативные варианты и важные нюансы резервного копирования 1С

Проанализируем дополнительные способы и лучшие практики организации бекапов СУБД PostgreSQL, особенно при работе с информационными базами 1С:

  1. Запрет интерактивного ввода ключом -w: Чтобы скрипт не зависал неограниченно долго при сбоях авторизации в фоновом режиме, рекомендуется добавлять флаг -w (--no-password). В этом случае утилита сразу завершит работу с ошибкой, если пароль не был получен из переменных окружения или pgpass.conf.
  2. Ведение логов выполнения: При вызове бекапа из Планировщика задач Windows перенаправляйте текстовый вывод в лог-файл командой > D:\Backup\backup.log 2>&1. Это позволит оперативно диагностировать возможные ошибки выполнения.
  3. Сохранение пользователей и ролей: Утилита pg_dump создаёт дамп только одной конкретной базы данных. Глобальные объекты СУБД (пользователи, роли и их права) в дамп не попадают. Для их сохранения периодически выполняйте команду:
    
    "C:\Program Files\PostgreSQL\9.6.3-3.1C\bin\pg_dumpall.exe" -U postgres --roles-only > D:\Backup\roles.sql
    
  4. Выбор формата для крупных баз: Для высоконагруженных баз 1С большого объема обычный логический дамп single-thread формата -F c может выполняться очень долго. В таких случаях выгрузку ускоряют использованием формата каталога (-F d) с многопоточным выполнением через параметр -j (число параллельных потоков), либо переходят на механизмы физического резервного копирования (утилита pg_basebackup, инструменты WAL-G или pgBackRest).
← На главную