如何以编程方式知道pg_restore何时完成

时间:2016-12-13 17:58:33

标签: python-3.x pg-restore

我正在编写一个将执行pg_restore的Python脚本。恢复完成后,我希望Python脚本执行多个CREATE和GRANT语句来创建数据库用户。

*我无法使用pg_dumpall将这些内容添加到转储中,因为我从AWS迁移并且pg_dumpall是不允许的。因此,我必须下载各个权限并使用模板/字典编写脚本来为我完成。

**我的问题:我的Python脚本是否有办法检查pg_restore命令是否已完成,以便它可以移动到下一段代码?现在,一旦pg_restore被启动,它立即返回SUCCESS。我还没有找到任何相关的东西。通常,在SQL Server中,当我需要等待某些事情(通常是JobAgent)完成时,我会在循环中等待DELAY。

1 个答案:

答案 0 :(得分:0)

我在上面添加了这个评论,但作为答案,它更加明显。

看起来这比我想象的要简单得多。我将在这里分享我的解决方案,以防其他人遇到类似问题的其他人。我不需要使用subprocess.Popen来执行pg_restore命令,而是需要使用subprocess.check_call。在doc中,它明确地说明了subprocess.check_call:

  

“运行带参数的命令。等待命令完成。如果是   返回代码为零然后返回,否则引发CalledProcessError。“

一旦我将它添加到我的Python脚本中,它的表现就像我希望的那样 - 它暂停直到pg_restore完成,然后转移到下一行代码。