如何以编程方式知道 pg_restore 何时完成
How to programmatically know when pg_restore is Complete
我正在编写将执行 pg_restore 的 Python 脚本。恢复完成后,我希望 Python 脚本执行多个 CREATE 和 GRANT 语句来创建数据库用户。
*我不能使用 pg_dumpall 将它们添加到转储中,因为我正在从 AWS 迁移并且 pg_dumpall 是不允许的。因此,我不得不降低个人权限并使用 template/dictionary 编写脚本来为我完成。
**我的问题:我的 Python 脚本是否有办法检查 pg_restore 命令是否已完成,以便它可以移动到下一段代码?现在,一旦 pg_restore 开始,它立即 returns 成功。我一直无法找到任何关于此的信息。通常,在 SQL 服务器中,当我需要等待某事(通常是 JobAgent)完成时,我会在循环中等待延迟。
我在上面添加了这个作为评论,但它作为答案更明显。
看来这个解决方案比我想象的要简单得多。我将在这里分享我的解决方案,以防其他人遇到类似问题的 post。我没有使用 subprocess.Popen 来执行 pg_restore 命令,而是需要使用 subprocess.check_call。在 doc 中,它明确表示 subprocess.check_call:
"Run command with arguments. Wait for command to complete. If the
return code was zero then return, otherwise raise CalledProcessError."
将此添加到我的 Python 脚本后,它的表现完全符合我的希望 - 它会暂停,直到 pg_restore 完成,然后再转到下一行代码。
我正在编写将执行 pg_restore 的 Python 脚本。恢复完成后,我希望 Python 脚本执行多个 CREATE 和 GRANT 语句来创建数据库用户。
*我不能使用 pg_dumpall 将它们添加到转储中,因为我正在从 AWS 迁移并且 pg_dumpall 是不允许的。因此,我不得不降低个人权限并使用 template/dictionary 编写脚本来为我完成。
**我的问题:我的 Python 脚本是否有办法检查 pg_restore 命令是否已完成,以便它可以移动到下一段代码?现在,一旦 pg_restore 开始,它立即 returns 成功。我一直无法找到任何关于此的信息。通常,在 SQL 服务器中,当我需要等待某事(通常是 JobAgent)完成时,我会在循环中等待延迟。
我在上面添加了这个作为评论,但它作为答案更明显。
看来这个解决方案比我想象的要简单得多。我将在这里分享我的解决方案,以防其他人遇到类似问题的 post。我没有使用 subprocess.Popen 来执行 pg_restore 命令,而是需要使用 subprocess.check_call。在 doc 中,它明确表示 subprocess.check_call:
"Run command with arguments. Wait for command to complete. If the return code was zero then return, otherwise raise CalledProcessError."
将此添加到我的 Python 脚本后,它的表现完全符合我的希望 - 它会暂停,直到 pg_restore 完成,然后再转到下一行代码。