我正在尝试从 Web 界面执行一些 PostgreSQL DB 命令。我使用 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 操作。是否有另一种方法可以从二进制 postgres .backup 文件进行备份和恢复,可以用 php 完成?