Не во всех СУБД есть возможность настроить Резервное копирование базы данных по расписанию штатными средствами. Например, в Microsoft SQL Server это делается без проблем, а вот в PostgreSQL такой возможности «из коробки» нет.
Но выход есть: создать файл сценария и добавить его исполнение в расписание задач в Windows.
В переменных database, host, port, userName, bin, backupDir будут храниться значения имени базы данных, сервера, порта, имени пользователя БД, путь к bin папке PostgreSQL и директории сохранения резервных копий соответственно.
Пусть значение driver = 0 будет отвечать за PostgreSQL, а 1 — за Microsoft SQL Server.
Определим текст *.bat-файла:
QString batText = "@ECHO OFF \n"
"SET dmpfile="+database+"-FullBackup-%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2% \n"
"IF \"%TIME:~0,1%\"==\" \" (SET dmpfile=%dmpfile%-0%TIME:~1,1%) ELSE (SET dmpfile=%dmpfile%-%TIME:~0,2%) \n"
"SET dmpfile=%dmpfile%-%TIME:~3,2%-%TIME:~6,2%.backup \n"
"set text = Begin to backup... \n"
"echo %text% \n";
if (driver==0)
batText += QString(
"cd %1\ \n"
"pg_dump.exe --host %2 --port %3 --username %4 --no-password --format"
"custom --blobs --verbose --file \"%5\\%dmpfile%\" %6")
.arg(bin, host, port, userName,
backupDir.replace("/", "\\"), database);
else
batText += QString("SQLCMD -S %1 -E -Q \"BACKUP DATABASE %2 "
"TO DISK = '%3/%dmpfile%' "
"WITH INIT, NOFORMAT, SKIP, NOUNLOAD\"")
.arg(host, database, backupDir);
Имя файла резервной копии будет иметь при этом подобный вид: DatabaseName-FullBackup-2018-08-07 -11-23-38.backup, то есть имя базы данных, FullBackup + таймстемп.
Далее запишем текст в файл: Продолжить чтение «Резервное копирование базы данных по расписанию: MS SQL Server и PostgreSQL»