1

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

*我不能使用 pg_dumpall 将它们添加到转储中,因为我正在从 AWS 迁移并且不允许使用 pg_dumpall。所以,我不得不取消个人权限并使用模板/字典编写一个脚本来为我做这件事。

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

4

1 回答 1

0

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

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

“使用参数运行命令。等待命令完成。如果返回码为零,则返回,否则引发 CalledProcessError。”

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

于 2017-03-01T18:06:20.393 回答