PostgreSQLのバックアップをC#で行いたい

投稿者: Anonymous

やりたいこと
現在、LinuxサーバーのDBのバックアップをクライアント(windows)から行うシステムを作りたいと思っているのですが、躓いてしまったため質問させていただきます。
色々と調べつつ、下記のようなコードを書いたのですが、実行してもバックアップファイルは生成されません。
どの部分を直すことによって正常に動作しますでしょうか。

private void Button_Click(object sender, RoutedEventArgs e)
{
            //Processオブジェクトを作成
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = @"set PGPASSWORD=***&& pg_dump -Fc -v --host=192.***.**.*** --username=postgres --dbname=System -f C:Users---Desktopdatabase.dump";
            startInfo.Verb = "runas";
            process.StartInfo = startInfo;
            process.Start();
 }

コマンドプロンプトで直接"set PGPASSWORD="、"pg_dump -Fc -v –host=192...*** –username=postgres –dbname=System -f C:Users—Desktopdatabase.dump**"と入力すると、バックファイルを作ることができました。

解決

CMDで複文を記述するときに区切る記号は&ひとつでよいと思います。

C:UsersXXXX>SET AAA=aaa&echo %AAA%
aaa

それでもダメな場合は、コマンドプロンプトでうまくいくのですから、batファイルに記述して、CMDで実行してはいかがでしょうか?

事前にファイルを作成できないなら、batファイルを新規に作成し、環境変数PGPASSWORDの設定とpg_dumpを実行するコマンドを書き込み、batファイルを実行し、batファイルを削除すればよいと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *