Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Примерный ученик от Июль 02, 2014, 16:28



Название: QT3.3.8 PostgreSQL QProcess
Отправлено: Примерный ученик от Июль 02, 2014, 16:28
для архивирования БД используется вызов стандартной утилиты psql:
Код:
			proc=new QProcess(this);
if (proc)
{
proc->addArgument( "psql" );
proc->addArgument( "-U" );
proc->addArgument( "postgres" );
proc->addArgument( "-d" );
proc->addArgument( "template1" );
proc->addArgument( "-W" );
proc->addArgument( "-f" );
proc->addArgument( qApp->applicationDirPath()+"/del.sql" );
connect( proc, SIGNAL(processExited()),
this, SLOT(okDel()) );
connect( proc, SIGNAL(readyReadStderr()), this, SLOT(readFromTest()) );
connect( proc, SIGNAL(readyReadStdout()), this, SLOT(readFromOut()) );
if ( !proc->start() )
{
proc->kill();
delete(proc);
proc=0;
}
                      }

Пример удаления БД. psql запрашивает пароль, но ни в readFromTest() ни в readFromOut() управление не попадает.
Что у меня не так?


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: Fat-Zer от Июль 02, 2014, 17:16
psql запрашивает пароль с терминала (/dev/tty), а не с stdin'а... обмануть его можно только, если создать виртуальный терминал, но почти уверен, что в QProcess Qt3 такого нет... Так что овчинка выделки не стоит...

а почему собственно не использовать драйверы Qt для работы с БД?


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: Примерный ученик от Июль 02, 2014, 17:30
архив надежнее средствами СУБД.


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: Fat-Zer от Июль 02, 2014, 18:29
архив надежнее средствами СУБД.
??

ты ж ему на вход всё равно sql'евский скрипт подсовываешь...


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: vbv от Июль 02, 2014, 23:49
А что мешает использовать стандартный pg_dump?
Да и вообще в pg_hba.conf прописать пользователя без пароля с localhost.

Но это все надо смотреть в настройках самого postgresql.
И на мой взгляд все же без пароля, а пользователя в pg_hba.conf,  
и для backup использовать pg_dump.

PS: A удаление сделать через dropdb.
      Или используя QSqlQuery на худой конец.

PPS: Но и тут не все так гладко, надо проверить текущие подключения к бд.
        Иначе может колом стать. (точнее ждать придется долго.)


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: Примерный ученик от Июль 03, 2014, 21:51
архив надежнее средствами СУБД.
??

ты ж ему на вход всё равно sql'евский скрипт подсовываешь...
ну да, но этот скрипт делает pg_dump. Ему пароль не нужен.


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: Примерный ученик от Июль 03, 2014, 21:55
А что мешает использовать стандартный pg_dump?
Да и вообще в pg_hba.conf прописать пользователя без пароля с localhost.

Но это все надо смотреть в настройках самого postgresql.
И на мой взгляд все же без пароля, а пользователя в pg_hba.conf,  
и для backup использовать pg_dump.

PS: A удаление сделать через dropdb.
      Или используя QSqlQuery на худой конец.

PPS: Но и тут не все так гладко, надо проверить текущие подключения к бд.
        Иначе может колом стать. (точнее ждать придется долго.)
наверно так и сделаю, база локальная, выставлю ей доступ trust для локальных подключений. А я пробовал и pg_restote. Просто для создания архива пароль не нужен, а вот при восстановлении БД из архива - спрашивает.


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: vbv от Июль 04, 2014, 00:07
так дать этому пользователю (который делает backup) параметр WITH CREATEDB.
И при восстановлении заходить этим пользователем на <template> и восстанавливать.
чего-то типа:
cat db_dump.sql | psql -U trust_user template1 > result.log
или использовать pg_restore.


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: Примерный ученик от Июль 06, 2014, 11:04
после запуска процесса идет запрос пароля, а как о нем узнать и как его передать?


Название: Re: QT3.3.8 PostgreSQL QProcess
Отправлено: vbv от Июль 06, 2014, 12:11
Значит - чего-то не так происходит если все же спрашивает пароль.

Как вариант - посмотреть исходники pg_dump и pg_restore и прочитав API постгре - сделать это все на чистом С.