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




Пост 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: 1266
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.08.16 15:26. Заголовок: Все понятно: - hbpgs..


Все понятно:
- hbpgsql из поставки MiniGUI;
- вызов hb_DynCall( { "PQlibVersion", "libpq.dll", HB_DYN_CTYPE_INT } ) работает, пользуйтесь и помните о dll hell;
- сервер где установлен непонятно, не пингуется на локальной машине и стандартном порте.





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


Пост N: 1267
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.08.16 15:29. Заголовок: Andrey пишет: А выг..


Andrey пишет:

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



Для вызова типа hb_DynCall( { "PQlibVersion", "libpq.dll", HB_DYN_CTYPE_INT } ) никого убивать не надо.
hb_DynCall сама кого хошь убьет



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




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


Петр пишет:

 цитата:
- сервер где установлен непонятно, не пингуется на локальной машине и стандартном порте.


Вот так:
80408 - 8.4.8
90407 - 9.4.7
90407 - 9.4.7
cConnInfo is "host = localhost database = test"
PQPing( cConnInfo ) returns PQPING_NO_ATTEMPT (connection not attempted (bad params))
cConnInfo is "host = Serv-Test port = 3333"
PQPing( cConnInfo ) returns PQPING_NO_ATTEMPT (connection not attempted (bad params))
cConnInfo is "host = Serv-Test hostaddr = 85.137.101.33 port = 5432 connect_timeout = 10"
PQPing( cConnInfo ) returns PQPING_OK (server is accepting connections)


Спасибо БОЛЬШОЕ Петр !

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




Пост N: 5058
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.08.16 00:09. Заголовок: Некоторые тесты срав..


Некоторые тесты сравнения LetoDb и PostgreSql.

LetoDb - отправка по 1000 записей за 1 транзакцию,
размер буфера транзакции равен 1 660 000 байт.

PostgreSql - отправка всех записей за 1 транзакцию,
размер буфера транзакции равен размеру файла.


Система CentOS, 1Gb ОЗУ, 2Gb HDD

----------------------------------
Файл: 16 Мб, 20 полей, 10 000 записей

LetoDb ver 2.15 - 15 транзакции, время копирования на сервер 00:04 (сек.)
PostgreSql ver 9.4.7 - 1 транзакция, время копирования на сервер 00:08 (сек.)


Файл: 158 Мб, 20 полей, 100 000 записей
LetoDb ver 2.15 - 143 транзакции, время копирования на сервер 00:25 (сек.)
PostgreSql ver 9.4.7 - 1 транзакция, время копирования на сервер НЕТ. Вылет по ошибке.


Система Windows 2008 R2, 8Gb ОЗУ, 500Gb HDD
----------------------------------
Файл: 16 Мб, 20 полей, 10 000 записей

LetoDb ver 2.15 - 15 транзакции, время копирования на сервер 00:04 (сек.)
PostgreSql ver 9.4.7 - 1 транзакция, время копирования на сервер 00:08 (сек.)


Файл: 158 Мб, 20 полей, 100 000 записей
LetoDb ver 2.15 - 143 транзакции, время копирования на сервер 00:34 (сек.)
PostgreSql ver 9.4.7 - 1 транзакция, время копирования на сервер 01:22 (сек.)



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


Пост N: 1259
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 25.08.16 16:42. Заголовок: Andrey пишет: Некот..


Andrey пишет:

 цитата:
Некоторые тесты сравнения LetoDb и PostgreSql.


Андрей, а скорость канала какая?

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




Пост N: 5059
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.08.16 17:18. Заголовок: 50-60 Мб...


50-60 Мб.

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


Пост N: 1260
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 25.08.16 17:32. Заголовок: Мне видится это так:..


Мне видится это так: когда передача идет порциями, сервер начинает записывать данные на диск по мере закрытия транзакций, не дожидаясь окончания передачи всех. В случае же, когда транзакция одна, сервер (postgre) сначала открывает новую транзакцию в журнале транзакций, накапливает ее (идет запись на диск), а потом, после закрытия клиентом, переписывает данные в основную базу (опять запись на диск). Т.е., идет интенсивное обращение к дисковой системе, растет время очереди диска. Получается, в этом примере postgre "уперся" в производительность диска.
Андрей, интересно, какие будут результаты, если на postgre тоже передать кусками.

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


Пост N: 1269
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 25.08.16 19:43. Заголовок: Andrey пишет: Систе..


Andrey пишет:

 цитата:
Система CentOS, 1Gb ОЗУ, 2Gb HDD


Это характеристики сервера или клиента? Если сервера - то сервер транзитный, тестовый или рабочий?

Кроме скорости копирования, ведь важна и сохранность данных. К сожалению, мы не видим кода и говорить что-то по теме тяжело.

Andrey пишет:

 цитата:
PostgreSql ver 9.4.7 - 1 транзакция, время копирования на сервер НЕТ. Вылет по ошибке.


Что значит вылет - программа упала или что?
Ошибка обрабатывалась?

Несколько ссылок по теме, ИМХО

Производительность приложений на основе PostgreSQL

Транзакции и точки сохранения в PostgreSQL


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




Пост N: 5060
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.08.16 17:19. Заголовок: Петр пишет: Система..


Петр пишет:

 цитата:
Система CentOS, 1Gb ОЗУ, 2Gb HDD

Это характеристики сервера или клиента? Если сервера - то сервер транзитный, тестовый или рабочий?


Это сервер, рабочий - взят в аренду. Прекрасно работает уже лет 5. ЛетоДБ уже года три работает на нем.
Поставил туда PostgreSQL для тестирования.
Петр пишет:

 цитата:
Что значит вылет - программа упала или что?
Ошибка обрабатывалась?



Ошибка не обрабатывалась. Программа упала при записи ОДНОЙ большой транзакции состоящей из 158 Мб (размер строки).
Смотрел по логам, нехватка памяти для PostgreSQL.
Т.е. нужно больше оперативки для PostgreSQL, а там всего 1Gb, свободно примерно 500Мб под работу.
Это не особо важно, что упала программа. Самое главное что такие данные можно писать в PostgreSQL.
Хотя реально такие большие данные сложно представить, да и оперативки сейчас много на серверах.

Тесты делал для сравнения с ЛетоДБ и текущими задачами, которые делаю.
Получается что ЛетоДБ шустрей будет в таких тестах. А дальше посмотрим.

Код выложу, просто ещё тест не доделал до конца.

Петр СПАСИБО за статьи !

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




Пост N: 5063
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.08.16 03:33. Заголовок: При старте программы..


PSP пишет:

 цитата:
Андрей, интересно, какие будут результаты, если на postgre тоже передать кусками.


Да наверно это лучше будет и по скорости и сервер с маленькой памятью - падать не будет.

--------------------
При старте программы открываю базу:
conn := PQconnectdb( "dbname="+cDatabase+"host ="+cHost+"user="+cUser+"password = "+cPass+"port=5432" )

Как проверить доступность базы через час/два/и т.д. из программы ?

Будет ли правильным следующий код:
IF PQstatus( conn ) != CONNECTION_OK
MsgStop( "Error connecting to server !")
ELSE
// запись в базу !
MsgLog(conn, VALTYPE(conn)) // возвращает ->'P' P что за тип такой ?
ENDIF

Читал про PQstatus здесь https://postgrespro.ru/docs/postgresql/9.5/libpq-status

И как сделать PQreset при ошибке ?


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


Пост N: 1270
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 31.08.16 07:15. Заголовок: Andrey пишет: MsgLo..


Andrey пишет:

 цитата:
MsgLog(conn, VALTYPE(conn)) // возвращает ->'P' P что за тип такой ?


Andrey пишет:

 цитата:


PSP пишет:
цитата:
Andrey, pointer - это указатель.






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


Пост N: 1271
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 31.08.16 07:54. Заголовок: Andrey пишет: Будет..


Andrey пишет:

 цитата:
Будет ли правильным следующий код:


В чем сомнения?

Можно так написать

 цитата:
 
IF PQstatus( conn ) == CONNECTION_BAD
PQreset( conn )
ENDIF

IF PQstatus( conn ) == CONNECTION_OK
// запись в базу !
ELSE
MsgStop( "Error connecting to server !")
ENDIF




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


Пост N: 1272
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 31.08.16 08:32. Заголовок: Andrey пишет: Как п..


Andrey пишет:

 цитата:
Как проверить доступность базы через час/два/и т.д. из программы ?


Умеете изъясняться высоким стилем..

из программы ?
Программно используя libpq — библиотеку для языка C, hbpqsql — библиотеку для Harbour

через час/два/и т.д. ?
Используйте таймер.

доступность базы?
Нет в терминах postgree понятия доступность базы - есть доступность сервера (PQping) и статус соединения (PQstatus), есть PQsocket.
После подтвержения статуса соединения можно получить имя базы, с которой установлено соединение (PQdb)

В любом случае держать часами открытое соединение я бы не стал. Для периодических задач лучше проверить статус сервера и, в случае доступности, переустановить соединение.

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




Пост N: 5071
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.09.16 01:45. Заголовок: Петр пишет: В любом..


Петр пишет:

 цитата:
В любом случае держать часами открытое соединение я бы не стал. Для периодических задач лучше проверить статус сервера и, в случае доступности, переустановить соединение.


Спасибо ! Понял.

Можно ли при получении данных с сервера:
oQuery := oServer:Query( "SELECT * FROM " + cTable )

как то и куда то поставить - do events ?
А то форма (в другом потоке) замирает и всё...

Потом в исходнике tpostgre.prg надо бы исправить
METHOD TableStruct( cTable ) CLASS TPQserver
строка 344 и ниже, а так же добавить новые типы полей для Харбора :
ELSEIF "timestamp" $ cType
cType := "C"

Как это сделать ? Писать в Github ?

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


Пост N: 1275
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.09.16 12:13. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли при получении данных с сервера:
oQuery := oServer:Query( "SELECT * FROM " + cTable )

как то и куда то поставить - do events ?


В существующем виде ответ - НЕТ

Или перепишите/дополните hbpgsql ( в части см. подключение к серверу баз данных неблокирующим способом), или оптимизируйте ваш запрос, потому, что

а) использование * вместо select_list в некоторых кругах считается плохим тоном ;
б) обратите внимание на то, что указания LIMIT и OFFSET позволяют получить только часть строк из тех, что выдал остальной запрос
Если и у вас в форме отображается 100 строк, зачем вам тащить 1000 (или того больше).


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




Пост N: 1202
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.09.16 12:38. Заголовок: Andrey пишет: Потом ..


Andrey пишет:
 цитата:
Потом в исходнике tpostgre.prg надо бы исправить
METHOD TableStruct( cTable ) CLASS TPQserver
строка 344 и ниже, а так же добавить новые типы полей для Харбора :
ELSEIF "timestamp" $ cType
cType := "C"
Как это сделать ? Писать в Github ?


Можно сделать свой клас, наследованный от TPQserver, скопировать (в свой класс) и подправить как нужно METHOD TableStruct( cTable )
В программе вместо TPQserver использовать свой класс.

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


Пост N: 1277
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.09.16 17:59. Заголовок: Andrey пишет: Как э..


Andrey пишет:

 цитата:
Как это сделать ? Писать в Github ?



Кстати, с почином


 цитата:
2016-09-02 01:58 UTC+0200 Viktor Szakats (vszakats users.noreply.github.com)
* contrib/hbpgsql/hbpgsql.hbx
* contrib/hbpgsql/postgres.c
+ add PQlibVersion() -> <nVersion> (returns 0 for pre-9.1 postresql versions)
Ref: https://github.com/harbour/core/pull/127/ by @VerchenkoAG



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




Пост N: 5073
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.09.16 19:59. Заголовок: Петр пишет: Кстати,..


Петр пишет:

 цитата:
Кстати, с почином


Спасибо !
Буду дальше тогда предложения выкладывать...

Пока использую библиотеку \MiniGUI\SOURCE\HbPgSql, там сам tpostgre.prg исправил,
и очень хорошо и просто собирается libpq.lib - СПАСИБО БОЛЬШОЕ Григорию, об нас всех позаботился !!!
В Харборе contrib_hbpgsql - так и не смог собрать.

Столкнулся с такой непоняткой.
Тестирую работу с базой при отрыве соединения.
Т.е. база открыта в Tsbrowse, а потом я отключаю службу на сервере - Postgres.
Ну типа внезапный обрыв соединения.

После обрыва соединения проверяю доступность коннекта:
? "Ответ сервера при закрытии: ", PQstatus( oServer:pDb() )
IF PQstatus( oServer:pDb() ) == CONNECTION_OK
oServer:Commit()
ELSE
? "Ошибка сервера :", oServer:ErrorMsg()
ENDIF
oServer:Destroy() // убить объект


Почему PQstatus( oServer:pDb() ) выдаёт 0 (т.е. CONNECTION_OK ) ?
Что не так делаю ?

А потом сваливается с ошибкой в tpostgre.prg
Error BASE/2020 Неверный аргумент: PQRESULTSTATUS</p><BR>
Called from PQRESULTSTATUS(0)
Called from TPQSERVER:COMMIT(168)


res := PQexec( ::pDB, "COMMIT" ) // Строка 167
lError := PQresultStatus( res ) != PGRES_COMMAND_OK // Строка 168


Как в исходнике убрать ошибку или не надо убирать ?

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


Пост N: 1278
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.09.16 22:13. Заголовок: Andrey пишет: Что н..


Andrey пишет:

 цитата:
Что не так делаю ?

Вам виднее

Andrey пишет:

 цитата:
А потом сваливается с ошибкой в tpostgre.prg

Ошибка в postgres.c

Andrey пишет:

 цитата:
или не надо убирать ?

Надо

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




Пост N: 5075
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.09.16 15:39. Заголовок: А как бы использоват..


А как бы использовать функцию PQping у себя ?
Или нужно как то затаскивать через те функции которые давали:

hLib := hb_libLoad( "libpq.dll" )
? GetPingResult( hb_DynCall( { "PQping", hLib, HB_DYN_CTYPE_CHAR }, c )

Неудобно уж очень.

Подскажите (помогите) сделать пожалуйста эту функцию для tpostgre.prg из MiniGUI\SOURCE\HbPgSql
Заранее огромное спасибо !

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

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