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

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

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

[pastacode lang=»cpp» manual=»void%20myClass%3A%3AupdatePgPassFile(QString%20fileLine)%0A%7B%0A%09QString%20appDataLoc%20%3D%20QStandardPaths%3A%3AwritableLocation(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20QStandardPaths%3A%3AAppDataLocation)%3B%0A%20%20%20%20QDir%20appDir(appDataLoc)%3B%0A%20%20%20%20if%20(!appDir.cdUp())%20%7B%0A%20%20%20%20%20%20%20%20error(tr(%22%D0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B9%D1%82%D0%B8%20%D0%B2%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%20%251%20%D0%B4%D0%BB%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9%20postgresql%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.arg(appDataLoc))%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20QString%20destination%20%3D%20appDir.absolutePath()%2B%22%2Fpostgresql%22%3B%0A%20%20%20%20appDir%20%3D%20QDir(appDir.absolutePath()%2B%22%2Fpostgresql%22)%3B%0A%20%20%20%20if%20(!appDir.exists())%0A%20%20%20%20%20%20%20%20appDir.mkpath(destination)%3B%0A%20%20%20%20QFile%20file(destination%2B%22%2Fpgpass.conf%22)%3B%0A%20%20%20%20if%20(!file.open(QIODevice%3A%3AReadWrite))%20%7B%0A%20%20%20%20%20%20%20%20error(tr(%22%D0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B2%D0%BE%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%BC%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9%20postgresql!%22))%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20QStringList%20text%20%3D%20QString(file.readAll()).split(%22%5Cn%22)%3B%0A%20%20%20%20text.removeAll(%7B%7D)%3B%0A%20%20%20%20if%20(!text.contains(fileLine))%20%7B%0A%20%20%20%20%20%20%20%20QTextStream%20out(%26file)%3B%0A%20%20%20%20%20%20%20%20out%20%3C%3C%20fileLine%20%3C%3C%20endl%3B%0A%20%20%20%20%7D%0A%20%20%20%20file.close()%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

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.

Пример содержимого файла паролей:

Пример содержимого файла паролей pgpass

Файл паролей PostgreSQL pgpass в Windows: 1 комментарий

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.