WebインターフェイスからいくつかのPostgreSQLDBコマンドを実行しようとしています。proc_open()を使用してWindowsコマンドプロンプトにパイプします。psql(および他のすべてのpostgresコマンド)はパスワードをオプションとして受け入れないため、パスワードを書き込みストリームに送信する必要があります。以下のコードにより、ブラウザがハングします。リソースが作成されていないか、パスワードが適切にパイプされていません。この時点でどんな提案も歓迎します。
$cmd = '""C:\\Program files\\PostgreSQL\\9.0\\bin\\psql.exe" --host localhost --port 5432 -U postgres --dbname $database_name --command "$query""';
$p=proc_open($cmd,
array(array("pipe","r"), array("pipe","w"), array("pipe","w")),
$pipes);
if (is_resource($p)){
fwrite($pipes[0],"mypassword");
fclose($pipes[0]);
proc_terminate($p);
proc_close($p);
}
[コマンド内のクレイジーな二重引用符に気付くでしょう。これは、何らかの理由でWindowsに必要なようです。]
この問題の回避策は大歓迎です。
- 以前にsystem()とexec()を使用しようとしましたが、インタラクティブプロンプトを処理しないため、あきらめました。インタラクティブのためのphpのより良いオプションはありますか?
- pg_query()はpostgres DBと対話するためのメインコマンドですが、pg_dumpおよびpg_restore操作はサポートされていません。phpで実行できるバイナリpostgres.backupファイルからバックアップおよび復元する別の方法はありますか?