2015-03-09 1 views
0

Я пытаюсь создать резервную копию базы данных с помощью pg_dump. Имя базы данных не имеет символов ASCII, например, 本 物 で は な い デ ー タ ベ ー ス ス.pg_dump Fails Когда символы UTF-8 в имени выходного файла

Я делаю следующий вызов:

pg_dump.exe --file="C:\Users\AUser\AppData\Local\Temp\本物ではないデータベース名_20150309185239.pgbak" pg_backupc4c978f4aebc4153adcabab6e097c347 

Однако это не удается из-за ошибки:

pg_dump: [archiver] could not open output file "C:\Users\AUser\AppData\Local\Temp\????????????_20150309185239.pgbak": Invalid argument 

То, что я не понимаю, что другие команды работают с не ASCII символов. Например, mdkdir 本物ではないデータベース名 отлично работает.

Является ли это ошибкой в ​​pg_dump или я что-то не так?

UPDATE

По Шерил «@ Mike Cat Напомним,» в комментариях, я проверил переназначение и он работал в обоих Powershell и стандартной командной строки.

Однако, я тогда пытался автоматизировать это с C# и когда я пытаюсь запустить команды выше, с использованием C# Process он не:

 ProcessStartInfo psi = new ProcessStartInfo(command, args); 
     psi.CreateNoWindow = true; 
     psi.UseShellExecute = false; 
     psi.RedirectStandardOutput = psi.RedirectStandardError = true; 
     using (Process process = new Process()) 
     { 
      process.StartInfo = psi; 
      string s = ""; 
      process.ErrorDataReceived += delegate (object sender, DataReceivedEventArgs e) 
      { 
       s += e.Data; 
      }; 
      string s1 = ""; 
      process.OutputDataReceived += delegate (object sender, DataReceivedEventArgs e) 
      { 
       s1 += e.Data; 
      }; 
      process.Start(); 
      process.BeginErrorReadLine(); 
      process.BeginOutputReadLine(); 
      TimeSpan maxTime = TimeSpan.FromMinutes(10); 
      if (!process.WaitForExit((int)maxTime.TotalMilliseconds)) 
      { 
       throw new Exception("Command " + command + " " + args + " Timed out after " + maxTime.TotalSeconds); 
      } 
      if (process.ExitCode != 0) 
      { 
       throw new Exception("Command " + command + " " + args + " failed with " + s + " " + s1); 
      } 
     } 

Опять же, я могу сделать C# Process и называют mkdir с японцами письма и все работает.

+0

Работает для меня в PostgreSQL 9.4 под 64-битным Ubuntu 14.04 LTS. Обычно это симптом проблемы с кодовой страницей или проблема с шрифтом. См. Http://stackoverflow.com/q/388490/562459 –

+0

@ MikeSherrill'CatRecall 'Я запускаю PostgreSQL 9.3 в Windows 8.1. Ill обновить до PostgreSQL 9.4 и посмотреть, что произойдет. – shortspider

+0

Какой терминал вы используете для ввода этой команды? если это cmd, позиция кавычек кажется неправильной. – Petesh

ответ

0

Per @ MikeSherrill'CatRecall ':.

«Опция файл --file анализируется и обрабатывается pg_dump кода, который не может быть написана, чтобы справиться с UTF-16 (Исходный код) Перенаправление осуществляется shell. Если вы хотите, чтобы это сработало, вам нужно либо переписать часть pg_dump(), либо использовать перенаправление командной строки ».