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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Очень долго пишет (1000 записей) PostgreSQL  (Прочитано 6361 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


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


Просмотр профиля
« : Февраль 19, 2009, 14:38 »

Проявилась проблема.
Таблица в БД из 20 столбцов.
В нее записывается > 1000 строк с данными.
Используется QSqlCursor.
100 строк ~ 4 cek
1000 строк ~ 45 cek
10000 строк ~ час.

Как с этим можно бороться?
Записан

Как мало времени и как много нужно узнать
Rcus
Гость
« Ответ #1 : Февраль 19, 2009, 15:01 »

/*Кастует телепатию первого уровня и догадывается что речь  идет о Qt 3.3*/
/*Открывает документацию http://doc.trolltech.com/3.3/sql.html#7*/
Цитировать
QSqlCursor operates on a single record at a time. Whenever performing an insert, update or delete using QSqlCursor, only a single record in the database is affected.
/*Кастует телепатию второго уровня и предполагает что проблема во вставке записей по одной*/
На телепатию третьего уровня не хватает маны кода
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


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


Просмотр профиля
« Ответ #2 : Февраль 19, 2009, 15:14 »

За телепатию - 5 балов.
А как вставлять записи скопом?
Код:
	QSqlCursor sCur("fp");
QSqlQuery sc("select nextval('_s')");  // номер  от последовательности
QSqlQuery scu("select nextval('_i')");  // индекс от последовательности
int jj=0;
for (int i=0;i<2000;i++)
{
sCur.select();
QSqlRecord *buffer = sCur.primeInsert();  // запись для вставки
if (sCur.isActive())
{
QSqlQuery sc("select nextval('_sti')"); 
QSqlQuery scu("select nextval('_indus0')"); 
sc.next();
buffer->setValue("ind",sc.value(0).toInt());
scu.next();
buffer->setValue("ind0",scu.value(0).toInt());
buffer->setValue("namep","tygrgg");
sd.currentDate();
buffer->setValue("date_",sd);
buffer->setValue("tipd",i);
buffer->setValue("razm",i);
buffer->setValue("tipp",13);
buffer->setValue("regkb",14);
buffer->setValue("min_",48.8);
buffer->setValue("max_",148.8);
buffer->setValue("nom",48.8);
buffer->setValue("grad",48.8);
buffer->setValue("ubat1",6.0);
buffer->setValue("ubat2",12.0);
buffer->setValue("ur1",13);
buffer->setValue("ur2",413);
buffer->setValue("parkmin",14);
buffer->setValue("parkmax",15);
buffer->setValue("tipf",1342);
buffer->setValue("pe",0);
buffer->setValue("pind",2);
sCur.insert();
}
« Последнее редактирование: Февраль 19, 2009, 15:22 от Примерный ученик » Записан

Как мало времени и как много нужно узнать
Rcus
Гость
« Ответ #3 : Февраль 19, 2009, 15:21 »

можно попробовать QSqlDatabase::transaction() до, и QSqlDatabase::commit(). А вообще в PG для вставки множества записей есть команда COPY
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


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


Просмотр профиля
« Ответ #4 : Февраль 19, 2009, 15:46 »

Транзакция не помогает.
А как использовать COPY - нужно подумать, QSqlCursor вряд ли подойдет...
Записан

Как мало времени и как много нужно узнать
Rcus
Гость
« Ответ #5 : Февраль 19, 2009, 17:03 »

А вот и код. Я не работал с Qt 3, но все же строка sCur.select(); вызывает вопрос о ее применении. В примерах немного подругому происходит вставка
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


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


Просмотр профиля
« Ответ #6 : Февраль 19, 2009, 17:29 »

А вот и код. Я не работал с Qt 3, но все же строка sCur.select(); вызывает вопрос о ее применении. В примерах немного подругому происходит вставка
Вы чертовски правы...
Работает совсем по другому...
Я гонял туды-суды кучу ненужных данных... Непонимающий
Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #7 : Февраль 28, 2009, 22:22 »

Делал так.... Через QSqlQuery..... А сами запросы разделял ;

Типа INSERT INTO .. ()... ;
INSERT INTO .. ()... ;
INSERT INTO .. ()... ;
INSERT INTO .. ()... ;
.....
Работает быстро Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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