pg_dump 进程未写入任何文件
pg_dump in Process not writing any file
我正在编写一些 C# 代码来备份我的 Posgresql 数据库。
public static bool MakeBackup(string schema, string userName, string password, string backupFolder)
{
var database = "Import";
var timestamp = DateTime.Now.ToString("yyyyMMdd-HH-mm-ss");
var file = String.Format("{0}_{1}.sql", schema, timestamp);
var fullPath = String.Format(@"{0}\{1}", backupFolder, file);
var executablePath = @"C:\Program Files\PostgreSQL.3\bin\pg_dump.exe";
var arguments = String.Format(@" -h localhost -d{0} -n{1} -U{2} -w{3} > {4}",database, schema, userName, password, fullPath );
Boolean result = false;
try
{
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = executablePath;
info.Arguments = arguments;
info.CreateNoWindow = true;
info.UseShellExecute = false;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = info;
proc.Start();
proc.WaitForExit();
result = true;
}
catch (Exception ex)
{
//Console.writeline(ex.Message);
}
return result;
}
我一开始收到拒绝访问错误。我通过确保我的应用程序具有对输出文件夹的写入权限并将 info.Arguments
设置为完整的 pg_dump.exe 路径来修复此问题。
我试过在调试中暂停,然后复制参数并在命令提示符下执行它们,效果很好。
所以我没有收到任何错误,但我的文件夹仍然是空的。
有什么建议吗?
您正在尝试将带有 > 的 pg_dump 的输出转发到一个文件。这将不起作用,因为没有 shell 处理输出转发。相反,您应该使用 pg_dump 的选项 -f output_file
将输出保存到所需的文件。
目前 > file
将作为命令行参数发送到 pg_dump,它可能会也可能不会显示错误。
我正在编写一些 C# 代码来备份我的 Posgresql 数据库。
public static bool MakeBackup(string schema, string userName, string password, string backupFolder)
{
var database = "Import";
var timestamp = DateTime.Now.ToString("yyyyMMdd-HH-mm-ss");
var file = String.Format("{0}_{1}.sql", schema, timestamp);
var fullPath = String.Format(@"{0}\{1}", backupFolder, file);
var executablePath = @"C:\Program Files\PostgreSQL.3\bin\pg_dump.exe";
var arguments = String.Format(@" -h localhost -d{0} -n{1} -U{2} -w{3} > {4}",database, schema, userName, password, fullPath );
Boolean result = false;
try
{
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = executablePath;
info.Arguments = arguments;
info.CreateNoWindow = true;
info.UseShellExecute = false;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = info;
proc.Start();
proc.WaitForExit();
result = true;
}
catch (Exception ex)
{
//Console.writeline(ex.Message);
}
return result;
}
我一开始收到拒绝访问错误。我通过确保我的应用程序具有对输出文件夹的写入权限并将 info.Arguments
设置为完整的 pg_dump.exe 路径来修复此问题。
我试过在调试中暂停,然后复制参数并在命令提示符下执行它们,效果很好。
所以我没有收到任何错误,但我的文件夹仍然是空的。
有什么建议吗?
您正在尝试将带有 > 的 pg_dump 的输出转发到一个文件。这将不起作用,因为没有 shell 处理输出转发。相反,您应该使用 pg_dump 的选项 -f output_file
将输出保存到所需的文件。
目前 > file
将作为命令行参数发送到 pg_dump,它可能会也可能不会显示错误。