PostgreSQL, Qt

Qt: Восстановление pg_restore БД PostgreSQL в Windows

Здесь: Qt: Резервная копия pg_dump БД PostgreSQL в Windows я показала один из способов организации создания резервной копии базы данных.

Сейчас речь пойдет о восстановлении базы из бэкапа. Здесь тоже будем использовать пакетный файл для вызова pg_restore.

Про каталог bin, файл паролей pgpass написано в статье по ссылке выше.

[pastacode lang=»cpp» manual=»%2F%2Fname%20-%20%D0%B8%D0%BC%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0A%2F%2Ffile%20-%20%D1%84%D0%B0%D0%B9%D0%BB%20%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8%0Avoid%20myClass%3A%3ArestoreDatabase(QString%20name%2C%20QString%20file)%0A%7B%0A%20%20%20%20QString%20errorMsg%3B%0A%20%20%20%20QString%20connectionName%20%3D%20connectToDB(name%2C%20errorMsg)%3B%0A%20%20%20%20if%20(connectionName.isEmpty())%7B%0A%20%20%20%20%20%20%20%20error(errorMsg)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20QString%20binDir%20%3D%20postgresBinDirectory()%3B%0A%20%20%20%20if%20(binDir.isEmpty())%20%7B%0A%20%20%20%20%20%20%20%20error(tr(%22%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%20bin%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD.%20%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%251%20%D0%B8%D0%B7%20%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BF%D0%B8%D0%B8%20%252%20%D0%BF%D1%80%D0%B5%D1%80%D0%B2%D0%B0%D0%BD%D0%B0%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(name).arg(file))%3B%0A%20%20%20%20%20%20%20%20QSqlDatabase%3A%3AremoveDatabase(connectionName)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20QSqlQuery%20query(QSqlDatabase%3A%3Adatabase(connectionName))%3B%0A%09%2F%2F%D1%81%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%B0%20%D1%83%D0%B4%D0%B0%D0%BB%D1%8F%D0%B5%D0%BC%20%D1%81%D1%85%D0%B5%D0%BC%D1%83%20(%D1%83%20%D0%BC%D0%B5%D0%BD%D1%8F%20%D0%BF%D0%B0%D0%B1%D0%BB%D0%B8%D0%BA)%2C%20%0A%09%2F%2F%D0%B7%D0%B0%D1%82%D0%B5%D0%BC%20%D0%B5%D0%B5%20%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC%20-%20%D1%87%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%8C%D0%BA%D1%83%D1%8E%0A%20%20%20%20if%20(!query.exec(QString(%22DROP%20SCHEMA%20public%20cascade%3B%20%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22CREATE%20SCHEMA%20public%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22AUTHORIZATION%20postgres%3B%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22COMMENT%20ON%20SCHEMA%20public%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22IS%20’standard%20public%20schema’%3B%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22GRANT%20ALL%20ON%20SCHEMA%20public%20TO%20PUBLIC%3B%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22GRANT%20ALL%20ON%20SCHEMA%20public%20TO%20%251%3B%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(postgresUser)))%20%7B%0A%20%20%20%20%20%20%20%20error(tr(%22%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%81%D1%85%D0%B5%D0%BC%D1%8B%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%251%3A%20%252%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(name).arg(query.lastError().text()))%3B%0A%20%20%20%20%20%20%20%20QSqlDatabase%3A%3AremoveDatabase(connectionName)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20QSqlDatabase%3A%3AremoveDatabase(connectionName)%3B%0A%09%2F%2F%D1%82%D0%B5%D0%BA%D1%81%D1%82%20batch-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%0A%20%20%20%20QString%20batText%20%3D%20QString(%22%40ECHO%20OFF%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22SET%20dmpfile%3D%251%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22set%20text%20%3D%20Begin%20to%20restore…%20%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22echo%20%25text%25%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22cd%20%2Fd%20%252%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pg_restore%20—host%3D%254%20—port%3D%255%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22—username%3D%256%20—verbose%20-d%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%20%253%20%5C%22%25dmpfile%25%5C%22%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22set%20%2Fp%20id%3D%5C%22The%20process%20is%20finished%20successfully.%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Press%20Enter%20to%20exit…%5C%22%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.arg(file%2C%20binDir%2C%20name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2C%20ui-%3Eport-%3Etext()%2C%20postgresUser)%3B%0A%20%20%20%20QString%20fileName%20%3D%20QString(%22%251-restore.bat%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.arg(name)%3B%0A%20%20%20%20if%20(!writeBatFile(batText%2C%20fileName%2C%20%0A%09%09%09%09%09%20%20QCoreApplication%3A%3AapplicationDirPath()%2B%22%2Ftemp%22))%0A%20%20%20%20%20%20%20%20return%3B%0A%09%2F%2F%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%20%D1%84%D0%B0%D0%B9%D0%BB%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BD%D1%83%D0%B6%D0%BD%D0%BE%0A%20%20%20%20updatePgPassFile(QString(%22%251%3A%252%3A%253%3A%254%3A%255%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ui-%3Eport-%3Etext()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20postgresUser%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ui-%3Epassword-%3Etext()))%3B%0A%09%2F%2F%D0%B2%D1%8B%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D0%BC%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D1%8B%D0%B9%20%D1%84%D0%B0%D0%B9%D0%BB%20%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0A%20%20%20%20system(qPrintable(%22cmd.exe%20%2Fc%20%5C%22%22%2B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20QDir%3A%3AtoNativeSeparators(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20QString(%22%251%2F%252%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(QCoreApplication%3A%3AapplicationDirPath()%2B%22%2Ftemp%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(fileName)%2B%22%5C%22%22)))%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

 

PostgreSQL, Qt, Базы данных

Файл паролей PostgreSQL pgpass в Windows

Для восстановления базы данных из резервной копии используется исполняемый файл сервера pg_restore. Если в настройках сервера выставлена авторизация по имени и паролю, то при использовании утилиты необходимо вводить пароль при каждой операции восстановления БД из бэкапа. Что не подходит в случае пакетной операции, например, или когда операция должна производится без взаимодействия с пользователем в этом ключе. Тогда сервер использует файл паролей pgpass. Он может и отсутствовать. Что тогда делать? Создать и обновлять. Продолжить чтение «Файл паролей PostgreSQL pgpass в Windows»