2016-12-13 10 views
1

私はpg_restoreを実行するPythonスクリプトを書いています。リストアが完了したら、PythonスクリプトでいくつかのCREATE文とGRANT文を実行してDBユーザを作成します。pg_restoreが完了したときにプログラムで知る方法

*私はAWSから移行しており、pg_dumpallは許可されていないため、pg_dumpallを使用してそれらをダンプに追加することはできません。だから、私は個々の特権をプルダウンし、テンプレート/辞書を使ってスクリプトを書かなければならなかった。

**私の質問:Pythonスクリプトがpg_restoreコマンドが完了したことをチェックして、コードの次の部分に移動できる方法はありますか?今すぐ、pg_restoreが起動されるとすぐに、SUCCESSを返します。私はこれについて何かを見つけることができませんでした。通常、SQL Serverでは、完了するために何か(通常はJobAgent)を待つ必要があるときに、ループで待機します。

ありがとうございました

+0

こんにちは。これをトップに打ち込むだけです。誰かがこの質問で私を助けてくれますか?私は本当に立ち往生しています。私はこの問題についてGoogleに助けを求める方法を使い果たしました。ありがとうございました – Wendy

+0

こんにちは。もう一度トップにぶつかる。誰かが私のPythonスクリプトがpg_dumpが処理を完了したときにプログラマチックにどのように伝えることができるか知っていますか?私は、pg_dumpコマンドを実行するためにsubprocess.Popenを使用します。コマンドが完了するまで、強制的に一時停止する方法がありますか? – Wendy

+0

これは私が思ったよりもはるかに単純な解決策を持っているようです。誰か他の人が同様の質問でこの投稿に出くわした場合、私はここで私の解決方法を分かち合うつもりです。 pg_dumpコマンドを実行するためにsubprocess.Popenを使用する代わりに、私はsubprocess.check_callを使う必要がありました。 [doc](https://docs.python.org/3.4/library/subprocess.html)に明示的に "引数を指定してコマンドを実行します。コマンドが完了するまで待ちます。戻りコードが0の場合はそれを返し、そうでない場合はraise CalledProcessError " – Wendy

答えて

0

私はこれを上記のコメントとして追加しましたが、回答としてはより明らかです。

これは私が思ったよりもはるかに単純な解決策があるようです。誰か他の人が同様の質問でこの投稿に出くわした場合、私はここで私の解決方法を分かち合うつもりです。 pg_restoreコマンドを実行するためにsubprocess.Popenを使用する代わりに、私はsubprocess.check_callを使う必要がありました。 docでは、それが明示的にsubprocess.check_callのために言う:「。引数を指定してコマンドを実行し、コマンドが完了するのを 戻りコードがゼロだった場合、次に返し、そうでない場合はCalledProcessErrorを上げるのを待ちます。」

私はPythonスクリプトにこれを追加したら、それは私が期待したように正確に行わ - pg_restoreのは、コードの次の行に移動する前に完了するまで、それが一時停止しました。

関連する問題