Здесь: Qt: Резервная копия pg_dump БД PostgreSQL в Windows я показала один из способов организации создания резервной копии базы данных.
Сейчас речь пойдет о восстановлении базы из бэкапа. Здесь тоже будем использовать пакетный файл для вызова pg_restore.
Про каталог bin, файл паролей pgpass написано в статье по ссылке выше.
void myClass::restoreDatabase(QString name, QString file) { QString errorMsg; QString connectionName = connectToDB(name, errorMsg); if (connectionName.isEmpty()){ error(errorMsg); return; } QString binDir = postgresBinDirectory(); if (binDir.isEmpty()) { qDebug() << "error"; QSqlDatabase::removeDatabase(connectionName); return; } QSqlQuery query(QSqlDatabase::database(connectionName)); if (!query.exec(QString("DROP SCHEMA public cascade; " "CREATE SCHEMA public " "AUTHORIZATION postgres; " "COMMENT ON SCHEMA public " "IS 'standard public schema'; " "GRANT ALL ON SCHEMA public TO PUBLIC; " "GRANT ALL ON SCHEMA public TO %1;") .arg(postgresUser))) { qDebug() << "error"; QSqlDatabase::removeDatabase(connectionName); return; } QSqlDatabase::removeDatabase(connectionName); QString batText = QString("ECHO OFF \n" "SET dmpfile=%1 \n" "set text = Begin to restore... \n" "echo %text% \n" "cd /d %2 \n" "pg_restore --host=%4 --port=%5 " "--username=%6 --verbose -d " " %3 \"%dmpfile%\"\n" "set /p id=\"The process is finished successfully. " "Press Enter to exit...\"") .arg(file, binDir, name, host, ui->port->text(), postgresUser); QString fileName = QString("%1-restore.bat") .arg(name); if (!writeBatFile(batText, fileName, QCoreApplication::applicationDirPath()+"/temp")) return; //Вызов функции обновления файла паролей updatePgPassFile(QString("%1:%2:%3:%4:%5") .arg(host, ui->port->text(), name, postgresUser, ui->password->text())); system(qPrintable("cmd.exe /c \""+ QDir::toNativeSeparators( QString("%1/%2") .arg(QCoreApplication::applicationDirPath()+"/temp") .arg(fileName)+"\""))); }