Дано:
--
Windows 2012 R2 Standart
Исполняемые файлы установлены сюда:
C:\Program Files\PostgresPro 1C\9.4
Папка с Postgres тут
D:\pgsql\9.4\data
Первая часть, pg_dump
Написал скрипт на powershell
Если передать ему в качетсве параметра имя базы, он сделает дамп одной базы. Если запустить его без параметров, он сделает дамп всех баз кроме template0, template1, postgres.
[CmdletBinding()]param([String]$dbname="",[String]$dumpdir= 'd:\tmp\bacula\pgsql',[String]$PGDUMP="C:\Program Files\PostgresPro 1C\9.4\bin\pg_dump.exe",[String]$PSQL="C:\Program Files\PostgresPro 1C\9.4\bin\psql.exe",[String]$dbserver='localhost',[String]$dbuser='postgres',[String]$dbpassword='uekmrf')$sql_listdb="select datname from pg_database where not datname in ('template0','template1','postgres') order by datname;"$env:PGPASSWORD = $dbpassword$datestamp = Get-Date -UFormat "%Y%m%d-%H%M%S"Write-Verbose -message dumpdir=$dumpdirWrite-Verbose -message PGDUMP=$PGDUMPWrite-Verbose -message PSQL=$PSQLWrite-Verbose -message dbserver=$dbserverWrite-Verbose -message dbuser=$dbuserWrite-Verbose -message dbpassword=$dbpasswordWrite-Verbose -message dbname=$dbnameWrite-Verbose -message datestamp=$datestampWrite-Verbose -message "Проверяем, существует ли папка $dumpdir"if(!(Test-Path -Path $dumpdir )){Write-Verbose -message "Cоздаём папку $dumpdir"New-Item -ItemType directory -Path $dumpdir | Out-Null} else {Write-Verbose -message "Удаляем папку с дампами"Remove-Item -path $dumpdir -Force -Recurse | Out-NullNew-Item -ItemType directory -Path $dumpdir | Out-Null}Write-Verbose -message "Проверяем указана ли база данных для копирования"if ($dbname -eq "") {Write-Verbose -message "Копируем все базы кроме template0, template1, postgres"$dblist = &$PSQL -t -h $dbserver -U $dbuser -c $sql_listdbforeach($db in $dblist) {$db = $db.TrimStart()if ($db -ne "") {$dbname=$dbWrite-Verbose -message "Копируем базу данных $dbname"&$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\$dbname-$datestamp.sql.gz --compress=1}}} else {Write-Verbose -message "Копируем указанную базу данных $dbname"&$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\$dbname-$datestamp.sql.gz --compress=1}Write-Verbose -message "Создание дампов завершено"
Скрипт запускаем из бакулы следующим образом:
ClientRunBeforeJob = "PowerShell.exe -ExecutionPolicy Bypass -File D:\\pgsql\\9.4\\backup_postgres.ps1"
Скрипт удалит папку d:\tmp\bacula\pgsql, создаст её заново и сложит все дампы в неё.
Бакуле останется только забрать их от туда.