On-line: гостей 3. Всего: 3 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 4890
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.16 14:39. Заголовок: MiniGui + PostgreSQL


Кому будет интересно.
https://habrahabr.ru/post/282764/

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 133 , стр: 1 2 3 4 5 6 7 All [только новые]


постоянный участник


Пост N: 1248
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.07.16 16:31. Заголовок: Andrey пишет: Сдела..


Andrey пишет:

 цитата:
Сделал тест для МиниГуи + PostgreSQL, копирование dbf-файла 13000 записей за 3 мин.
Тормоза однако. Но это копирование записей в лоб: одна за другой.
Искал варианты ускорения процесса.


Андрюха, SQL никак не ускорит копирование файла. Это же ж Structured Query Language таки...)))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5021
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.16 18:14. Заголовок: PSP пишет: Андрюха,..


PSP пишет:

 цитата:
Андрюха, SQL никак не ускорит копирование файла. Это же ж Structured Query Language таки...)))


Смотри Пост N: 5017 и читай по ссылке.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5022
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.16 18:16. Заголовок: Петр пишет: Почитай..


Петр пишет:

 цитата:
Почитайте README.md из поставки harbour


Не ту у меня такого файла...
Давно не обновлялся с CVS.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1210
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 26.07.16 19:45. Заголовок: Andrey пишет: Давно..


Andrey пишет:

 цитата:
Давно не обновлялся с CVS


Ну тогда открою великую тайну: harbour уже на git перешел..

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1249
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 26.07.16 20:23. Заголовок: Andrey пишет: Смотр..


Andrey пишет:

 цитата:
Смотри Пост N: 5017 и читай по ссылке.


И чё? "...in order to make the insertion of large portions of data into PostgreSQL faster..."
Одна простая вещь: физическая среда передачи данных. Всё остальное вторично. Если эта самая large portions of data пролазит через физику с трудом, то никакой SQL тут не поможет. Пойми это.
ps. nPreBuffer: автор подразумевает размер 1400 байт, чтобы был ниже стандартного MTU=1500 байт. Но, 1500 байт бывает только в случае соединения IPoE или в локальной сети. Все другие типы соединений имеют свой MTU. Это значит, что фрагментация пакетов будет в любом случае. Она там и пишет: "needs testing how libPQ is doing buffering by itself, and if this is needed?"

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5023
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.16 21:10. Заголовок: Петр пишет: Ну тогд..


Петр пишет:

 цитата:
Ну тогда открою великую тайну: harbour уже на git перешел..


Спасибо ! Отстал я от жизни...

Но там тоже нет доки
https://github.com/harbour/core/tree/master/contrib/hbpgsql

Понял, про какую доку...
https://github.com/harbour/core/blob/master/README.md

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5927
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.07.16 21:56. Заголовок: вернул тему на место..


вернул тему на место

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5048
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.16 21:32. Заголовок: Разобрался со скорос..


Разобрался со скоростью загрузки в базу для PostgeSql.
Конвертор Dbf -> PostgeSql на MiniGui заработал !
База 18 Мб, 14 тыс.записей за 40 секунд всего - отправка ОДНИМ запросом. То что надо.
LetoDb так же примерно качает, может чуть быстрей, только за 15-20 транзакций.
Раньше было примерно 4 минуты.

Читал что в PostgeSql можно одним запросом отправлять 1Gb. Пока ещё не проверял...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5967
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.16 21:36. Заголовок: Andrey И в чем дело..


Andrey
И в чем дело было ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1253
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.08.16 21:45. Заголовок: Andrey пишет: Читал..


Andrey пишет:

 цитата:
Читал что в PostgeSql можно одним запросом отправлять 1Gb. Пока ещё не проверял...


К примеру, есть два канала: один - 10Миб/с, а второй 100Мбит/с. Как думаешь, одинаковое время будет затрачено на передачу пакета данных размером в 1Gb в обоих случаях? Может не стоит озвучивать цифры, зависящие от массы других факторов? Если на передачу тех же твоих 14тыс. записей через хреновый канал сотового оператора понадобится час, ты скажешь, что PostgeSQL - это отстой? Прости уж за сарказм))

 цитата:
LetoDb так же примерно качает, может чуть быстрей, только за 15-20 транзакций.


Это только подтверждает, что всё упирается в физику.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5049
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.16 14:26. Заголовок: PSP пишет: Это толь..


PSP пишет:

 цитата:
Это только подтверждает, что всё упирается в физику.



Да я не спорю с этим.
Просто долго ковырялся с простым решением у себя в тестовом примере, пока не догадался как сделать.

Dima пишет:

 цитата:
Andrey
И в чем дело было ?



Делал как раньше на LetoDb - отправка по одной записи.
Потом сделал (SergKis помог, без него бы не получилось!) отправку через транзакции.

В PostgreSql сделал отправку всей базы ОДНОЙ транзакцией.

Просто привыкнуть надо к Sql, работа с DBF это просто. Хотя дай поработать кто не работал с DBF, то для него будет много непоняток.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1256
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 17.08.16 14:29. Заголовок: Andrey пишет: Да я ..


Andrey пишет:

 цитата:
Да я не спорю с этим.
Просто долго ковырялся с простым решением у себя в тестовом примере, пока не догадался как сделать.


Ок, я тоже перегибаю)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5051
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.16 20:01. Заголовок: Хотелось бы иметь от..


Хотелось бы иметь отдельный модуль postgres_aadd.c
Чтобы не зависить от разработчиков contrib_hbpgsql, когда они ещё это сделают.


В свой проект я добавил модуль: postgres_aadd.c

---------------- файл postgres_aadd.c ------------------
/*
* Добавочный файл к postgres.c
* Для определения версии libpq
*/

#include "hbapierr.h"
#include "hbapiitm.h"

HB_FUNC( PQLIBVERSION )
{
//#if PG_VERSION_NUM >= 90100
hb_retni( PQlibVersion() );
//#else
// hb_retni( 0 );
//#endif
}

---------------- конец файла postgres_aadd.c ---------------

Закоментировал строчки, т.к. всегда возвращается 0
Но потом не идёт компиляция моего проекта, ошибка:
postgres_aadd.c:
Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland
Error: Unresolved external '_PQlibVersion' referenced from ....
hbmk2[dbf_to_PostgreSQL]: Error: Running linker. 2


Нашел в исходниках функцию:
int PQlibVersion(void)
{
return PG_VERSION_NUM;
}

Помогите пожалуйста кто может - как подсоединить эту функцию ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1257
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 20.08.16 21:51. Заголовок: PG_VERSION_NUM поищи..


PG_VERSION_NUM поищи для начала.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5052
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.08.16 04:28. Заголовок: PSP пишет: PG_VERSI..


PSP пишет:

 цитата:
PG_VERSION_NUM поищи для начала.



Не нашёл... Где хоть искаь то ?


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3483
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.08.16 09:00. Заголовок: Andrey пишет: Помог..


Andrey пишет:

 цитата:
Помогите пожалуйста кто может - как подсоединить эту функцию ?



Наверное надо подключить файлы в начале модуля:

#include "libpq-fe.h"
#include "pg_config.h"

А еще лучше

#include "hbpgsql.h"
в которм находятся соответствующий определения

А саму функцию лучше написать так:

#include "hbapi.h"
#include "hbpgsql.h"

HB_FUNC( PQLIBVERSION )
{
hb_retni( PG_VERSION_NUM );
}


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1264
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.08.16 12:30. Заголовок: Pasha пишет: А сам..


Pasha пишет:

 цитата:

А саму функцию лучше написать так:

Если Андрею дать грабли - он рано или поздно на них наступит.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5053
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.08.16 14:17. Заголовок: Петр пишет: Если Ан..


Петр пишет:

 цитата:
Если Андрею дать грабли - он рано или поздно на них наступит.


Не надо мне давать. Я и сам их найду !

Pasha пишет:

 цитата:
А саму функцию лучше написать так:


Спасибо ! Получилось.

Только фигня получается.
Эта функция возвращает 80408, т.е. номер библиотеки libpq.lib
А мне надо было версию libpq.dll лежащий рядом с ехе-ником, через которую обращаюсь с сервером PostgreSql.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1265
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.08.16 14:24. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только фигня получается.


Не думал. что все получится так быстро (в смысле - грабли)

А ну попробуйте это
«
/* 
* IT IS IMPORTANT: in my case Postgres ver. 9.5.3 for Windows systems
* was installed on local machine, port 5432 (default)
*/

#include "hbdyn.ch"

PROCEDURE Main()

LOCAL hLib
LOCAL nVersion := 0

LOCAL cConnInfo
LOCAL host := "localhost"
LOCAL hostaddr := "127.0.0.1"
LOCAL port := 5432
LOCAL connect_timeout := 10

? PQlibVersion()
? hb_DynCall( { "PQlibVersion", "libpq.dll", HB_DYN_CTYPE_INT } )
//? hb_DynCall( { "PQlibVersion", "libpq_8.dll", HB_DYN_CTYPE_INT } )

hLib := hb_libLoad ( "libpq.dll" )
IF ! Empty( hLib )
nVersion := hb_DynCall( { "PQlibVersion", hLib, HB_DYN_CTYPE_INT } )
IF nVersion < 90100
? "The function PQping() not supported."
QUIT
ENDIF
// 1) !!databases!! is not valid word for ConnInfo
cConnInfo := "host = localhost database = test"
PingTest( cConnInfo, hLib )
// 2) the default port for Postgres is 5432, but we can try connect to port 3333 and see what is happen
cConnInfo := "host = " + host + " port = " + "3333"
PingTest( cConnInfo, hLib )
// 3) next attempt
cConnInfo := hb_strFormat( "host = %1$s hostaddr = %2$s port = %3$d connect_timeout = %4$d", host, hostaddr, port, connect_timeout )
PingTest( cConnInfo, hLib )

hb_libFree( hLib )
ENDIF

RETURN

/*---
*
*/
STATIC PROCEDURE PingTest( c, hLib )

? 'cConnInfo is "' + c + '"'
? "PQPing( cConnInfo ) returns ", GetPingResult( hb_DynCall( { "PQping", hLib, HB_DYN_CTYPE_INT }, c ) )

RETURN

/*---
*
*/
STATIC FUNCTION GetPingResult( n )

LOCAL aMsg := ;
{ ;
{ "PQPING_OK", "(server is accepting connections)"}, ;
{ "PQPING_REJECT", "(server is alive but rejecting connections)"}, ;
{ "PQPING_NO_RESPONSE", "(could not establish connection)"}, ;
{ "PQPING_NO_ATTEMPT", "(connection not attempted (bad params))"} ;
}
IF n >= 0 .AND. n < Len( aMsg )
RETURN ( aMsg[ n + 1 ][ 1 ] + " " + aMsg[ n + 1 ][ 2 ] )
ENDIF

RETURN ""

#pragma BEGINDUMP

#include "hbpgsql.h"

HB_FUNC( PQLIBVERSION )
{
hb_retni( PG_VERSION_NUM );
}

#pragma ENDDUMP
»

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5054
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.08.16 15:15. Заголовок: Петр пишет: А ну по..


Петр пишет:

 цитата:
А ну попробуйте это


Немного модифицировал под МиниГуи. Вот результат:
80408
90407
90407
cConnInfo is "host = localhost database = test"
PQPing( cConnInfo ) returns PQPING_NO_ATTEMPT (connection not attempted (bad params))
cConnInfo is "host = localhost port = 3333"
PQPing( cConnInfo ) returns PQPING_NO_RESPONSE (could not establish connection)
cConnInfo is "host = localhost hostaddr = 127.0.0.1 port = 5432 connect_timeout = 10"
PQPing( cConnInfo ) returns PQPING_NO_RESPONSE (could not establish connection)


Я так понял, что для определения версии libpq.dll достаточно всего этой строчки (и и новой функции):
? hb_DynCall( { "PQlibVersion", "libpq.dll", HB_DYN_CTYPE_INT } ) ?

А выгружать/убить после этой функции hb_DynCall() - не надо ?
А то не пользовался такой функцией.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 133 , стр: 1 2 3 4 5 6 7 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 816
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет