Russian Qt Forum
Апрель 28, 2024, 12:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT3.3.8 PostgreSQL QProcess  (Прочитано 5014 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« : Июль 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() управление не попадает.
Что у меня не так?
Записан

Как мало времени и как много нужно узнать
Fat-Zer
Гость
« Ответ #1 : Июль 02, 2014, 17:16 »

psql запрашивает пароль с терминала (/dev/tty), а не с stdin'а... обмануть его можно только, если создать виртуальный терминал, но почти уверен, что в QProcess Qt3 такого нет... Так что овчинка выделки не стоит...

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

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #2 : Июль 02, 2014, 17:30 »

архив надежнее средствами СУБД.
Записан

Как мало времени и как много нужно узнать
Fat-Zer
Гость
« Ответ #3 : Июль 02, 2014, 18:29 »

архив надежнее средствами СУБД.
??

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

Сообщений: 59


Просмотр профиля
« Ответ #4 : Июль 02, 2014, 23:49 »

А что мешает использовать стандартный pg_dump?
Да и вообще в pg_hba.conf прописать пользователя без пароля с localhost.

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

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

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

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #5 : Июль 03, 2014, 21:51 »

архив надежнее средствами СУБД.
??

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

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #6 : Июль 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. Просто для создания архива пароль не нужен, а вот при восстановлении БД из архива - спрашивает.
Записан

Как мало времени и как много нужно узнать
vbv
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #7 : Июль 04, 2014, 00:07 »

так дать этому пользователю (который делает backup) параметр WITH CREATEDB.
И при восстановлении заходить этим пользователем на <template> и восстанавливать.
чего-то типа:
cat db_dump.sql | psql -U trust_user template1 > result.log
или использовать pg_restore.
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #8 : Июль 06, 2014, 11:04 »

после запуска процесса идет запрос пароля, а как о нем узнать и как его передать?
Записан

Как мало времени и как много нужно узнать
vbv
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #9 : Июль 06, 2014, 12:11 »

Значит - чего-то не так происходит если все же спрашивает пароль.

Как вариант - посмотреть исходники pg_dump и pg_restore и прочитав API постгре - сделать это все на чистом С.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.