Call pg_restore from python



我正在尝试自动下载pg_dump文件并恢复这些文件。我在执行pg_restore命令时遇到问题。我目前正在使用:

from subprocess import PIPE, Popen
import shlex

command = f'pg_restore ' 
f'-h {host} ' 
f'-d {database} ' 
f'-U {username} ' 
f'{file_path}'
command = shlex.split(command)
p = Popen(command, shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE)
p.communicate(str.encode(f'r{password}r'))

但是,这会提示我填写密码(当我填写密码时,它工作正常(。

到目前为止我尝试过:

  • 设置shell = True(在这种情况下,我收到错误[Info] 2019-12-09 14:59:55 - [root] (b'', b'pg_restore: [archiver] input file does not appear to be a valid archive (too short?)n')(
  • 使用 传递密码


p.stdin.write(f'{self.push_password}n')p.stdin.flush()

  • 使用n而不是r
  • 只在p.communicate结束时通过r

我没有想法,不知道该怎么办。有谁知道如何在从 python 调用pg_restore时自动传递我的密码?

两种方式。

设置环境变量:

PGDATABASE, PGHOST, PGPORT and/or PGUSER

在文件中设置

密码可以放在一个文件中,postgresql 会拿起它

文档

当默认值不太正确时,您可以通过将环境变量 PGDATABASE、PGHOST、PGPORT 和/或 PGUSER 设置为适当的值来节省一些类型。(有关其他环境变量,请参见第 30.12 节。拥有一个~/.pgpass文件也很方便,以避免经常输入密码。有关更多信息,请参见第 30.13 节。

更多: https://www.postgresql.org/docs/8.3/app-psql.html

此处讨论:如何以非交互方式为 psql 指定密码?

相关内容

  • 没有找到相关文章

最新更新