Size: a a a

pgsql – PostgreSQL

2020 June 13

Д

Диман in pgsql – PostgreSQL
Тагил. Так в каком виде у вас объекты? Это массив объектов в котором надо посчитать значение*ед.измерения только для первый раз попавшегося айдишника?
источник

2_

2flower _ in pgsql – PostgreSQL
в этой функции если я правильно понял когда в табл. 50к записей, он каждый раз проверяет id которые проверял на предыдущей итерации,
в субд это все оптимизировано, вы придумываете велосипед, такой качественный тормозной.
источник

TS

Tagil Steel in pgsql – PostgreSQL
Диман
Тагил. Так в каком виде у вас объекты? Это массив объектов в котором надо посчитать значение*ед.измерения только для первый раз попавшегося айдишника?
В таблице есть поле value - значение и есть поле unit_id - единица измерения.
На выходе агрегата получается такое: {"1":22500,"2":56344, "3":98656}
источник

2_

2flower _ in pgsql – PostgreSQL
а не проще получить все строки какие нужны а потом уже сделать jsonb_agg?
источник

Д

Диман in pgsql – PostgreSQL
Опередил.)
источник

2_

2flower _ in pgsql – PostgreSQL
у меня смутное подозрение, что ваша задача решается гораздо проще, и будет выполнятся мгновенно,
просто заменив эту мегаагрегацию, несколькими вложенными запросами.
источник

TS

Tagil Steel in pgsql – PostgreSQL
2flower _
в этой функции если я правильно понял когда в табл. 50к записей, он каждый раз проверяет id которые проверял на предыдущей итерации,
в субд это все оптимизировано, вы придумываете велосипед, такой качественный тормозной.
Еще раз - это написано и на С и работает процентов может на 10-20 медленнее, чем штатный SUM, так что идеологически. все правильно. Проблема в том, что в реализации на PGSQL это работает раз в 50 медленнее. Что едопустимо. Поэтому хочется попробовать сделать на PLV8
источник

2_

2flower _ in pgsql – PostgreSQL
вы не понимаете логика написания на си и на sql разная.
источник

Д

Диман in pgsql – PostgreSQL
Вы не так язык используете. В базах нельзя оопшно ломиться так.
источник

2_

2flower _ in pgsql – PostgreSQL
это как латинский текст и арабский.
источник

2_

2flower _ in pgsql – PostgreSQL
вам надо дать оптимизатору данные а как их посчитать(циклы или джойны) он без вас разберется.
источник

TS

Tagil Steel in pgsql – PostgreSQL
2flower _
у меня смутное подозрение, что ваша задача решается гораздо проще, и будет выполнятся мгновенно,
просто заменив эту мегаагрегацию, несколькими вложенными запросами.
Побовали, получается раз в 5 медленнее, чем наш вариант на C, кроме того, складывать значения с разными единицами все равно приходится.
источник

Д

Диман in pgsql – PostgreSQL
+, настоятельно рекомендую воспользоваться оконной функицей как писали мы выше.
источник

TS

Tagil Steel in pgsql – PostgreSQL
Диман
Вы не так язык используете. В базах нельзя оопшно ломиться так.
Показать Вам упрощенную версию запроса, о котором говорим?
Только он в одно сообщение здесь не влезет....
источник

2_

2flower _ in pgsql – PostgreSQL
FOREACH i in array state.ids
       LOOP
           IF i = id THEN
               RETURN ROW(state.ids, state.accum);
           end if;
       END LOOP;
вот эта часть ваш якорь бессмысленный и беспощадный.
источник

Ð

Ð in pgsql – PostgreSQL
но это же обычная сумма через груп бай по единице измерения, тут не нужен даже кастомный агрегат
источник

2_

2flower _ in pgsql – PostgreSQL
зачем цикл когда можно проверить id в массиве или нет ШТАТНО хотя бы так.
источник

Ð

Ð in pgsql – PostgreSQL
тут вообще никакие функции и агрегаты не нужно писать
источник

2_

2flower _ in pgsql – PostgreSQL
вам нужно id=any(state.ids)
источник

2_

2flower _ in pgsql – PostgreSQL
я уже выше также писал.
источник