View Full Version : QProcess - Session and Permission

5th December 2007, 18:45
Hi there. Yhis is my first post and I hope someone can help me.

I'm having a problem with QProcess. I'm trying to execute pg_dump (PostgreSQL backup generator) from my application.

I added the agument list containing information about user, host, etc. and setted the enviroment variables to store the password.

I captured the output and received a message from pg_dump that says:

pg_dump: [archiver (db)] connection to database "sgtnewnew" failed: could not translate host name "localhost" to address: Unknown host
pg_dump: *** aborted because of error

The command line I used was:

C:\Arquivos de programas\PostgreSQL\8.2\bin>pg_dump.exe -i -h localhost -p 5432 -U postgres -F c -b -v -f C:\testeBat1.backup sgtnewnew

I made many tests and it seams that pg_dump.exe has not found it dependencies or something else. I tried to create a .bat file and place it in the postgres/bin folder and then call it using QProcess. I got the same error message. When I ran this .bat file by clicking twice over it, the backup was sucessfully done.

I tried to run it using system(c++ function) and it worked fine. The problem is that I need to capture the output (stdout) and QProcess does it for me.

Dows anyone had any problem like this??

Thans for now


5th December 2007, 18:50
How do you start the process?
On win the arguments have to be contained within quotes. See the documentation for QProcess::start()

5th December 2007, 18:57
This is my entire code. I seams pg_dump received all my parameters, but something was missed and it returned error. Note that I am using the full path of to pg_dump. Yhis _database objectc gives the all information about the database I want to backup :

string host = _database->host().empty() ? "localhost" : _database->host();
int port = _database->portNumber() == 0 ? 5432 : _database->portNumber();
string path = "C:\\Arquivos de programas\\PostgreSQL\\8.2\\bin";
string backupExe = "\"" + path + "\\pg_dump.exe\"";
string fileName = string(fileLineEdit->text().latin1());
string envPassword = "PGPASSWORD=" + _database->password();

_process = new QProcess(0);
connect(_process, SIGNAL(readyReadStdout()), this, SLOT(readFromStdout()));
connect(_process, SIGNAL(readyReadStderr()), this, SLOT(readFromStderr()));
QDir dir(path.c_str());


QStringList* strList = new QStringList();

QMessageBox::information(this, "Information", "Error starting process");



Obs: I am using QT 3.2.0

8th July 2008, 07:07

Using Qt 4.3... In Windows :P~...

Copy pg_dump.exe to your release folder
Copy all dependencies (zlib1.dll, libintl3.dll... ) to the same folder :p

This code work's great for me:

void ... :: on_backup_do_BD_triggered()
QString nome_arquivo = QFileDialog::getSaveFileName( this,
"Realizar Backup do Banco em...",
"Arquivo SQL (*.sql)" );

QProcess pg_dump;

QString nome;
QStringList parametros;

// Definindo a variavel de ambiente que tera o password
QStringList var_de_ambiente;

var_de_ambiente << "PGPASSWORD=" + banco->password();

pg_dump.setEnvironment( var_de_ambiente );

#ifdef Q_OS_WIN32
nome = "pg_dump.exe";

int porta = banco->port();

parametros << "-f" << nome_arquivo
<< "-F" << "p"
<< "-U" << banco->userName()
<< "-p" << QString::number( porta == -1 ? 5432 : porta )
<< "-h" << banco->hostName()
<< banco->databaseName();

pg_dump.start( nome, parametros );

if ( pg_dump.exitCode() )
QMessageBox erro( this );

erro.setWindowTitle( "Erro de backup" );
erro.setIconPixmap( QPixmap( ":/48x48/alert.png" ) );
erro.setText( "Ocorreu um erro ao tentar fazero backup do BD." );


NOTE: PGPASSWORD sets the password used if the server demands password authentication. Use of this environment variable is not recommended for security reasons (some operating systems allow non-root users to see process environment variables via ps);

11th May 2009, 11:32
Dear All

I use the same way to backup, but the problem I have right not is to gzip the file,

I am using Windows and 4.5.0 I would like to gzip the backup I took.

11th May 2009, 15:26
any body can help me for this?