Страница 1 из 5

Clarion - PostgreSQL

Добавлено: 28 Ноябрь 2012, 9:51
PIT
Clarion 8.9661
База posgtresql

Таблица для результатов запросов
sqlfile FILE,DRIVER('ODBC','/JOINTYPE=''ODBC 3.0'' /NESTING=TRUE'),OWNER(glo:owner),NAME('sqlfile'),PRE(sql),BINDABLE,CREATE,THREAD
Record RECORD,PRE()
mystr CSTRING(200) !
r01 STRING(50) !
.......................................
r20 STRING(50) !
END
END

Выполняю запрос :
sqlfile{PROP:SQL} = 'SELECT kod_pe,gos_nom from avto'
все ОК.
На запрос:
sqlfile{PROP:SQL} = 'WITH q(q1,q2) as (SELECT kod_pe,gos_nom from avto) (select * from q)'
после NEXT(sqlfile)
получаю:
fileerrorcode =
fileerror =
errorcode = 33
error = Record Not Available
SmartSniff показывает, что запрос выполнен и данные с сервера пришли, а Clarion их не видит.
Может кто знает как быть?

Re: Clarion - PostgreSQL

Добавлено: 28 Ноябрь 2012, 14:20
Алексей- Софт-Центр
Добрый день!
Я не использую posgtresql, но по аналогии с SQL,
я бы выполнил Ваш запрос непосредственно в среде posgtresql и посмотрел бы результат.


Алексей

Re: Clarion - PostgreSQL

Добавлено: 29 Ноябрь 2012, 6:42
PIT
В среде PostgreSQL запросы такого типа с созданием промежуточной таблицы выполняются прекрасно, причем и более сложные.
Приведенный пример очень простой.

Re: Clarion - PostgreSQL

Добавлено: 29 Ноябрь 2012, 8:35
Дед Пахом
Попробуйте посмотреть, что покажет trace.exe

Re: Clarion - PostgreSQL

Добавлено: 29 Ноябрь 2012, 19:17
Алексей- Софт-Центр
Добрый день!
Я не сомневаюсь в мощности языка.
Я сомневаюсь в результате его работы: что конкретно в данном случае явлется результатом выполнения запроса.

Алексей

Re: Clarion - PostgreSQL

Добавлено: 04 Декабрь 2012, 10:03
PIT
Приведенный пример это чистый тест.
Необходимость в таких запросах возникает при выборке данных из нескольких таблиц с одновременным применением расчетов, которые в этом случае выполняет сервер и выдает только результаты в объеме намного меньшем, чем при вычислениях на рабочей станции.

Re: Clarion - PostgreSQL

Добавлено: 04 Декабрь 2012, 12:55
Алексей- Софт-Центр
Добрый день!
Мы с Вами как китаец с чукчей разговориваем (ничего личного :))
Я спрашиваю про результат выполнения запроса, а Вы отвечаете - да они необходимы.
Начнем сначала:
На запрос:
sqlfile{PROP:SQL} = 'WITH q(q1,q2) as (SELECT kod_pe,gos_nom from avto) (select * from q)'
после NEXT(sqlfile)
получаю:
fileerrorcode =
fileerror =
errorcode = 33
error = Record Not Available
Ошибка может возникать, в том числе, по причине:
1. Действительно результатом выполнения запроса - нет записей
2. Структура данных , полученных в результате выполнения запроса, не соответствует буферу sqlfile
и т. д.
Поэтому я и предлагал Вам выполнить запрос в среде СУБД (без Клариона),
и посмотреть какие данные получаются в результате.

Отсюда и начать "пляски с бубном" :)

Алексей

Re: Clarion - PostgreSQL

Добавлено: 10 Январь 2013, 9:05
PIT
Ничего не помогло, но в процессе экспериментов вышел на другое решение, которое работает.
SELECT t.kod_pe, t.gos_nom
FROM
(select kod_pe,gos_nom
FROM avto) AS t
order by kod_pe;
Тоже готовим данные в промежуточной таблице (в данном случае 't') и получаем из нее результат.
Более сложный пример с двумя промежуточными таблицами (t1 и t2). Выборка из одной таблицы (tablo_out) с разными фильтрами.
SELECT t1.date_, t1.nomer, t1.s_o, t2.s_i
FROM
(select date_,nomer,oper_type,count(*) AS s_o
FROM tablo_out
where date_=77444 and oper_code=3 and oper_type=2
group by date_,nomer,oper_type) AS t1,
(select date_,nomer,oper_type,count(*) AS s_i
FROM tablo_out
where date_=77444 and oper_code=3 and oper_type=3
group by date_,nomer,oper_type) AS t2
WHERE t2.nomer=t1.nomer and t2.date_=t1.date_;
Применим и вариант с одной промежуточной таблицей с выборкой из нескольких таблиц.

Clarion - PostgreSQL

Добавлено: 27 Октябрь 2016, 16:30
Ал
Всем привет!
6.3, (ODBC) PostgreSQL 9.5.4
(да, pgSQL увидел "живьем" несколько дней назад)
надо синхронизировать данные файлов (Dat) с данными таблиц на сервере, сгенерил простенькую программку для проверки и перезаписи данных (loop-next, insert|update|delete, вообщем все просто по рабоче-крестьянски и без prop:sql...), но "неожиданно" все медленно :( , скорость обработки просто удручает, т.к. например на MS SQL все это работало б очень быстрее, но тут надо именно на PostgreSQL.
Есть ли у кого наработки, "волшебные пилюли", или только через скрипты можно ускориться?

Clarion - PostgreSQL

Добавлено: 27 Октябрь 2016, 17:12
kreator
А что именно медленнее? Уже был здесь, кстати, баттл по поводу скорости SQL. Например, нельзя для SQL делать set(File), потом next(File), и т.д.

Clarion - PostgreSQL

Добавлено: 27 Октябрь 2016, 18:45
Ал
да хз, просто может к новой системе не привык или сам :oops: где по коду накосячил, но кажется что пашет медленно - вместо ожидаемых секунд - минуты. поеду домой, подумать надо до завтра, с утра посвежевшим взглядом пройдусь - может взлетит)

Clarion - PostgreSQL

Добавлено: 27 Октябрь 2016, 20:27
Ал
посмотрел код, упростил просмотр при отборе "кандидатов" на обработку - залетало)
пошел на автобус :D

Clarion - PostgreSQL

Добавлено: 17 Декабрь 2016, 11:41
Ал
всем привет!
решил апнуть - тем, кто утомился с pgadmin 3, посмотрите http://dbeaver.jkiss.org/docs/features/

Clarion - PostgreSQL

Добавлено: 17 Декабрь 2016, 11:49
Ал
kreator писал(а): А что именно медленнее? Уже был здесь, кстати, баттл по поводу скорости SQL. Например, нельзя для SQL делать set(File), потом next(File), и т.д.
вообщем "велосипед" - начал формировать и отправлять инструкции (insert|update|delete) SQL порциями для обработки сразу больше чем одной записи - стало быстрее

Clarion - PostgreSQL

Добавлено: 17 Декабрь 2016, 12:43
Ал
пока такой вопрос у меня образовался, сразу оговорюсь, что тонкостей не знаю, мое дело в этом проекте - записать данные на один сервер pgsql и при необходимости считать на другом.
задача - очень быстро "зеркалировать" схему с кучей табличек между 2 серверами pqsql,
чел, который это обеспечивает, навесил триггеров и когда мои программы пишу на сервер небольшие порции данных, все быстренько обновляется и на другом сервере (<->), но как только порция данных увеличивается - до нескольких десятков тысяч записей, у меня из программы уходят инструкции на 1й сервер за миллисекунды/секунды/иногда за единицы минут (зависит от размера/формата полей в записях, вообще если много идет обновл. данных то в зависимости от формата файлов успешно через prop:sql порциями по 100/200/500 записей за раз отправляется, возможно и большими, но при увеличении размера порции через некоторое время падает скорость отправки, ну и проверять постоянно надо - вдруг "загрубил" и вышел за границы - сервак не примет такой кусман... ) и на 1м сервере все ок, но вот на другом (условно 2м) сервере, чтобы увидеть эти новые данные... приходится :mrgreen: идти ставить кофе/выпить его/вымыть посуду/сходить почитать http://forum.clarionlife.net/ :idied: , атас вообщем... - по условию надо быстрее все получать на 2м сервере, да и ожидалось что будет ОЧЕНЬ быстро :lol:
Чел намекает "у меня все ок", а ты сам виноват - много данных - правь СВОЙ алгоритм и пересылай меньше мусорных данных... Алгоритм-то я вычищу... в очередной раз :) , но по факту - действительно настолько МЕДЛЕННО идет синхронизация данных между серверами PostgreSQL? или пора ... чела, долго и вдумчиво, что бы он начал шевелиться? :lol:

up - порядка 50000 +/- 1000 записей - и всё, "замерзает" надолго...