我正在编写一个将执行pg_restore的Python脚本。恢复完成后,我希望Python脚本执行多个CREATE和GRANT语句来创建数据库用户。
*我无法使用pg_dumpall将这些内容添加到转储中,因为我从AWS迁移并且pg_dumpall是不允许的。因此,我必须下载各个权限并使用模板/字典编写脚本来为我完成。
**我的问题:我的Python脚本是否有办法检查pg_restore命令是否已完成,以便它可以移动到下一段代码?现在,一旦pg_restore被启动,它立即返回SUCCESS。我还没有找到任何相关的东西。通常,在SQL Server中,当我需要等待某些事情(通常是JobAgent)完成时,我会在循环中等待DELAY。
答案 0 :(得分:0)
我在上面添加了这个评论,但作为答案,它更加明显。
看起来这比我想象的要简单得多。我将在这里分享我的解决方案,以防其他人遇到类似问题的其他人。我不需要使用subprocess.Popen来执行pg_restore命令,而是需要使用subprocess.check_call。在doc中,它明确地说明了subprocess.check_call:
“运行带参数的命令。等待命令完成。如果是 返回代码为零然后返回,否则引发CalledProcessError。“
一旦我将它添加到我的Python脚本中,它的表现就像我希望的那样 - 它暂停直到pg_restore完成,然后转移到下一行代码。