пароль pg_dump в Python

У меня есть удаленный сервер ubuntu, скажем, 172.123.342.12. Я хочу сделать резервную копию базы данных postgresql на моем локальном компьютере с помощью скрипта python.

Мой сценарий:

def backUp(self):
        Pass = 'fb2024d4'
        os.putenv("PGPASSWORD",Pass)
        dt = datetime.now()
        format = "%Y_%b_%d"
        cur_time = dt.now()
        form_time = cur_time.strftime(format)
        backup_str = "C:\\Bitnami\\odoo-8.0-7\\postgresql\\bin\\pg_dump.exe --format=c -h 172.123.342.12 -p 5432 -d new_db -U bn_openerp > C:\\Users\\n\\Desktop\\Odoo_Backups\\%s.dump" %form_time
        os.system(backup_str)
        print ("Backup Created in Desktop")
        box.showinfo("Information", "Backup Created")

backup()

Ничего не делает. Некоторая помощь будет оценена по достоинству.

РЕДАКТИРОВАТЬ: сценарий работает с базой данных в Windows, поскольку я использую учетную запись администратора. Так что пароль не запрашивается. Но когда я пытаюсь сделать резервную копию базы данных с удаленного сервера ubuntu. Запрашивает пароль. Я пробовал следующие решения:

1.) SET PGPASSPASSWORD = C:\foo\bar..\pgpass.conf.
2.) os.putenv("PGPASSWORD","password")
3.) PGPASSWORD='password' pg_dump.exe -h localhost.....

На меня никто не работал.


person Manish Gupta    schedule 27.05.2015    source источник
comment
вы не можете запустить backup_str = C: \ Bitnami \ odoo-8.0-7 \ postgresql \ bin \ pg_dump.exe на ubuntu ...   -  person Vao Tsun    schedule 27.05.2015
comment
вы можете сохранить пароль в файле .pgpass   -  person Vao Tsun    schedule 27.05.2015
comment
Я запускаю его на своей локальной машине с Windows. у меня установлен postgresql. поэтому мне просто нужно передать параметры -h -p -d -U, и он сделает все остальное. вот почему я спросил, как передать пароль postgres в windows   -  person Manish Gupta    schedule 27.05.2015
comment
сохраните пароль в файл pgpass - прочтите postgresql.org/docs/9.1/static /libpq-pgpass.html В Microsoft Windows файл называется% APPDATA% \ postgresql \ pgpass.conf (где% APPDATA% относится к подкаталогу Application Data в профиле пользователя). (c)   -  person Vao Tsun    schedule 27.05.2015
comment
не могли бы вы уточнить немного подробнее. файл pgpass.conf находился в указанном вами каталоге. я отредактировал его и сохранил пароль   -  person Manish Gupta    schedule 27.05.2015
comment
если вы сохранили его в правильном формате, при подключении к базе данных он будет автоматически использован   -  person Vao Tsun    schedule 27.05.2015
comment
172.123.342.12:5432:new_db:bn_openerp:fb2024d4   -  person Vao Tsun    schedule 27.05.2015
comment
Я сделал то же самое. как мне пройти?   -  person Manish Gupta    schedule 27.05.2015
comment
когда вы вызываете pg_dump, он забирает сам файл. сначала пробует PGPASSWORD var, затем PGPASS, затем пробует pgpass по умолчанию. автоматически   -  person Vao Tsun    schedule 27.05.2015
comment
Давая мне эту ошибку. pg_dump: [архиватор (db)] соединение с базой данных new_db не удалось: FATAL: ошибка аутентификации passwor d для пользователя bn_openerp   -  person Manish Gupta    schedule 27.05.2015
comment
:: *: bn_openerp: fb2024d4 так поменять? ..   -  person Vao Tsun    schedule 27.05.2015
comment
172.123.342.12:5432:*:bn_openerp:fb2024d4 Я использую эту строку.   -  person Manish Gupta    schedule 27.05.2015
comment
попробуйте все звезды, кроме пароля   -  person Vao Tsun    schedule 27.05.2015
comment
Позвольте нам продолжить это обсуждение в чате.   -  person Manish Gupta    schedule 27.05.2015


Ответы (1)


Мне удалось использовать скрипт python для создания файла дампа с помощью pg_dump.exe:

filename = 'C:/Path/To/File/mydb_dump.sql'
pgDump = 'C:/Program Files/PostgeSQL/9.5/bin/pg_dump'

subprocess.Popen('"{}" -h 127.0.0.1 dbname > "{}"'.format(pgDump, filename), shell=True)

Несколько замечаний:

Я НАСТОЯЩИЙ ПРЕДОСТЕРЕЖЕНИЕ ПРИ ИСПОЛЬЗОВАНИИ shell=True !!!

Существует огромная угроза безопасности с возможными инъекциями оболочки согласно документации .

Я не уверен, будет ли работать с удаленным сервером Ubuntu, но я не мог понять, почему бы и нет, если все разрешения и совместное использование настроены правильно.



Я знаю, что это довольно давно, но надеюсь, что это поможет.

person Casey    schedule 19.01.2017