postgresql - 使用 QProcess 启动时 pg_dumpall 不工作

标签 postgresql qt dump qprocess

我想将我的数据和表从一个 postgres 安装复制到另一个,源版本在端口 5432 上监听目标服务器的端口 5433。用户 myUser 是两个版本的 super 用户。

Postgres“pg_dumpall”在使用 QProcess 启动时不工作 但是该命令在 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");

最佳答案

是的,这有点烦人,我试图用 ls | grep <pattern> 做同样的事情输入命令 - 产生多个进程...

我为 linux 想出了这个:

if (QProcess::startDetached("xfce4-terminal -x bash -c \"ls -l | grep main > out\""))
{
    qDebug("ok\n");
}
else
{
    qDebug("failed\n");
}

所以基本上,如果我将其分解:

  1. QProcess 使用执行参数 -x 运行 xfce4-terminal(或您想要的任何术语): xfce4-terminal -x <command to execute>

  2. 然后使用命令参数 -c(在转义引号中)执行 bash: bash -c \"bash command\"

  3. 最后是 bash 命令: ls -l | grep main > out

因此对于您的应用程序,您可以将最终命令(第 3 部分)替换为: pg_dumpall -p 5432 -U myUser | psql -U myUser -d myDbName -p 5433

我假设您使用的是 Linux? (对于使用 cmd 而不是终端的 Windows 也有类似的可能性。您也可以将 xfce4-terminal 替换为 gnome-terminal 这可能更常见,但可能需要检查 -x 是否相同... .IIRC 是。

可能有更好的方法来做到这一点......但我想利用 bash 的力量,所以这似乎是合乎逻辑的方法。

进一步:我认为你可以这样做:

QProcess::startDetached("bash -c \"ls -l | grep main > out\"")

并摆脱终端部分,(适用于简单的东西,如 ls),但我不确定是否设置了所有路径和其他东西......值得一试,因为它更整洁并删除了你的对任何特定终端的依赖...

关于postgresql - 使用 QProcess 启动时 pg_dumpall 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882156/

相关文章:

c++ - 在 QListView 中显示最后一个元素

linux - Windows 和 Linux 的 postgres 转储是否不同?

dump - 在通过 'pig -x local' 使用 grunt 时使用 DUMP 命令时如何抑制无用信息的膨胀?

mysql export sql dump alphabatically,导致导入时出现外键约束错误

mysql - 在启动默认 SQL 代理连接时更改默认 MySQL 或 PostgreSQL 端口号

arrays - PostgreSQL:使用某种排序条件对元素数组进行排序

java - 惰性字段始终加载

c++ - 不同的运行时行为取决于程序的启动方式(终端与 Qt Creator)

c++ - (Qt SDK) MySQL 头脑 Storm -.-

C++、Postgres、libpqxx 大查询