【发布时间】:2016-06-17 12:57:01
【问题描述】:
我想将我的数据和表从一个 postgres 安装复制到另一个,源版本在端口 5432 上侦听目标服务器的端口 5433。用户 myUser 在两个版本上都是超级用户。
使用 QProcess 启动 Postgres "pg_dumpall" 时不起作用 但该命令在 windows cmd 中有效,这里是:
pg_dumpall -p 5432 -U myUser | psql -U myUser -d myDbName -p 5433
但不是来自使用 QProcess 的 Qt 代码:
QProcess *startProgram = new QProcess();
startProgram->start("pg_dumpall -p 5432 -U myUser | psql -U myUser -d myDbName -p 5433");
startProgram->waitForFinished()
return true
startProgram->exitCode();
returns 1
startProgram->exitStatus();
return 0
无论如何,我的数据和表格都没有复制到目的地。 使用 QProcess 创建数据库可以使用:
startProgram->start("createdb -p 5433 -U myUser myDbName");
【问题讨论】:
-
我猜
QProcess只能启动可执行文件或脚本。您在命令中有一个管道,必须将其解释为 shell,并最终启动两个进程。system可能适用于此。或者您启动cmd.exe并将命令作为参数传递 (IIRC/c)。
标签: postgresql qt dump qprocess