【问题标题】:Backup Postgres from Python on Win10在 Win10 上从 Python 备份 Postgres
【发布时间】:2020-11-27 15:47:11
【问题描述】:

我正在尝试在 Win10 上从 Python 备份 Postgres。

我正在使用本地 Postgres12 的 Anaconda python 3.8、Win10 机器。在路径环境变量中,我有 postgres(lib 和 bin)、没有 anaconda 和 python 3.8(没有 anaconda)。

我能够使用窗口的命令外壳正确备份数据库:

pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump

但是当我在 anaconda 上运行它时:

os.system("pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump"  ) 

我得到输出 1 ,女巫是错误代码。它会创建文件,但它是空的。

使用:

import subprocess
stk= 'pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump'

try:
    subprocess.check_output(stk, shell=True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))

我明白了:

RuntimeError: command 'pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump' return with error (code 1): b"'pg_dump' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n"

如果我使用:subprocess.runsubprocess.call 我不会产生错误,但创建的文件是空的。

anaconda 解释器上的 os.systemsubprocess 似乎都无法访问命令 shell 上的环境变量。这怎么可能?以及如何克服它?调用shell的是不同的用户吗?

提前致谢。

【问题讨论】:

    标签: python postgresql shell backup os.system


    【解决方案1】:

    电脑重启了,问题解决了……路径没有变化,我相信从安装东西(python,postgres,...)的那一刻起,机器还没有重新启动。

    import os
    os.system("pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump" )
    

    工作!和

    import subprocess
    subprocess.call(r"C:\some\path\backup.bat")
    

    也有效!里面的backup.bat是:

    pg_dump pg_dump --dbname=postgresql://postgres:password@127.0.0.1:5432/test > C:\backup\dumpfile3.dump
    

    我想问题是 anaconda 解释器需要重新启动系统才能访问环境变量(postgres 变量所在的位置),这几乎没有意义,因为 return with error (code 1): b"'pg_dump' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n" 看起来像控制台消息。

    如果有人有更好的解释,欢迎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2019-05-14
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多