Для восстановления базы данных из резервной копии используется исполняемый файл сервера pg_restore. Если в настройках сервера выставлена авторизация по имени и паролю, то при использовании утилиты необходимо вводить пароль при каждой операции восстановления БД из бэкапа. Что не подходит в случае пакетной операции, например, или когда операция должна производится без взаимодействия с пользователем в этом ключе. Тогда сервер использует файл паролей pgpass. Он может и отсутствовать. Что тогда делать? Создать и обновлять.
void myClass::updatePgPassFile(QString fileLine) { QString appDataLoc = QStandardPaths::writableLocation( QStandardPaths::AppDataLocation); QDir appDir(appDataLoc); if (!appDir.cdUp()) { qDebug() << "error"; return; } QString destination = appDir.absolutePath()+"/postgresql"; appDir = QDir(appDir.absolutePath()+"/postgresql"); if (!appDir.exists()) appDir.mkpath(destination); QFile file(destination+"/pgpass.conf"); if (!file.open(QIODevice::ReadWrite)) { qDebug() << "error"; return; } QStringList text = QString(file.readAll()).split("\n"); text.removeAll({}); if (!text.contains(fileLine)) { QTextStream out(&file); out << fileLine << endl; } file.close(); }
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) вернет путь к папке вашего приложения для записи неких ваших данных, например,
c:\Users\YourUserName\AppData\Roaming\YourOrganizationName\YourApplicationName\
если вы задали имя организации, если нет, то будет
c:\Users\YourUserName\AppData\Roaming\YourApplicationName\
Но нам нужно на каталог выше, а потом попасть в каталог postgresql, чтобы в итоге получить путь к файлу паролей:
c:\Users\YourUserName\AppData\Roaming\postgresql\pgpass.conf
В каталоге postgresql создаем или обновляем по необходимости файл паролей pgpass.conf.
Пример содержимого файла паролей:
Файл паролей PostgreSQL pgpass в Windows: 1 комментарий