Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / AGGREGATE (пользовательские) / 7 сообщений из 7, страница 1 из 1
21.06.2020, 13:21
    #39971389
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
Речь о "Пользовательских агрегатных функциях".

Работаю с оконными функциями. Очень понравилось. Скорость потрясающая.
Но встала задача создать свои агрегатные функции. Создать то их можно без проблем, а вот посмотреть потом что получилось и их код никак не могу.

ВОПРОС: где можно увидеть код написанной мной агрегатной функции. В pgadmin4 максимум что можно увидеть - это что от данной функции зависит функция с таким то именем (которая как раз и является агрегатной).
Если делать
Код: sql
1.
2.
\x
select * from pg_aggregate 



можно найти некоторую информацию, но кода самой функции там точно нет.
...
Рейтинг: 0 / 0
21.06.2020, 13:33
    #39971395
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
Вот дополнительная картинка.
Знаю, что администратор ругаетесь на картинки, но в ней хорошо видно, что функций 3,
а отображается только 2.
Так же видно, что скрытых папок нет (все что можно - открыл).
В общем, ни по запросам, ни в pgadmin4 так и не нашел где можно увидеть свой же год своей же агрегатной функции.
...
Рейтинг: 0 / 0
21.06.2020, 21:22
    #39971546
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
О-О-О,

Вообще-то агрегаты это не совсем функции. Их создают командой CREATE AGGREGATE, указывая значения для ряда предопределенных свойств, увидеть которые можно именно запросом:
select * from pg_aggregate;

Можно и сюда заглянуть:
select * from pg_proc where prokind = 'a';

С pgAdmin4 всё прозаично. Агрегаты не показываются в навигаторе, потому что это не реализовано.
...
Рейтинг: 0 / 0
22.06.2020, 08:13
    #39971652
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
Павел Лузанов,

Не совсем понял, чем
select * from pg_proc where prokind = 'a';
отличается от просто (точнее отличия то есть, но кода там нет).
select * from pg_aggregate;
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
-[ RECORD 139 ]-+-------------------
proname         | agg_ема_короткая12
pronamespace    | 1163185
proowner        | 18067
prolang         | 12
procost         | 1
prorows         | 0
provariadic     | 0
protransform    | -
prokind         | a
prosecdef       | f
proleakproof    | f
proisstrict     | f
proretset       | f
provolatile     | i
proparallel     | u
pronargs        | 1
pronargdefaults | 0
prorettype      | 1700
proargtypes     | 1700
proallargtypes  | 
proargmodes     | 
proargnames     | 
proargdefaults  | 
protrftypes     | 
prosrc          | aggregate_dummy
probin          | 
proconfig       | 
proacl          | 


Визуально все то же, кода и сноски на используемую функцию нет.
Я ищу по select * from pg_aggregate WHERE aggtranstype=1700; и выдает всего 4 агрегатные функции (а не список из 139).
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
-[ RECORD 139 ]--+-------------------------------------
aggfnoid         | "анализ_данных"."agg_ема_короткая12"
aggkind          | n
aggnumdirectargs | 0
aggtransfn       | "анализ_данных"."ема_короткая12"
aggfinalfn       | -
aggcombinefn     | -
aggserialfn      | -
aggdeserialfn    | -
aggmtransfn      | -
aggminvtransfn   | -
aggmfinalfn      | -
aggfinalextra    | f
aggmfinalextra   | f
aggfinalmodify   | r
aggmfinalmodify  | r
aggsortop        | 0
aggtranstype     | 1700
aggtransspace    | 0
aggmtranstype    | 0
aggmtransspace   | 0
agginitval       | 2.5
aggminitval      |


.
Я так понимаю, что лучше тогда тупо писать внутрь своей функции Агрегатную функцию (в виде примечанию) и просто если что то нужно заменить, то просто удаляем агрегатную функцию и создаем с тем же названием и с новым кодом.
.
...
Рейтинг: 0 / 0
22.06.2020, 08:22
    #39971653
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
Можно сделать еще так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mmvb=> \da анализ_данных.*
Список агрегатных функций
-[ RECORD 1 ]----------+-------------------
Схема                  | анализ_данных
Имя                    | agg_ема_короткая12
Тип данных результата  | numeric
Типы данных аргументов | numeric
Описание               

|
.
Где анализ_данных.* это схема в которой расположена агрегатная функция.
...
Рейтинг: 0 / 0
22.06.2020, 09:48
    #39971689
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
О-О-О
Можно сделать еще так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mmvb=> \da анализ_данных.*
Список агрегатных функций
-[ RECORD 1 ]----------+-------------------
Схема                  | анализ_данных
Имя                    | agg_ема_короткая12
Тип данных результата  | numeric
Типы данных аргументов | numeric
Описание               

|
.
Где анализ_данных.* это схема в которой расположена агрегатная функция.


Команда \da как раз из pg_proc и выбирает только агрегатные функции, что я и предложил сделать прямым запросом к pg_proc. Это позволит убедиться, что функции никуда не потерялись.

Что касается кода, то у агрегатных функций его нет. Посмотрите на значение pg_proc.prosrc, там везде пустышка (aggregate_dummy).

Для агрегатных функций в pg_proc определены имя, параметры, выходное значение. А в pg_aggregate все остальные свойства агрегата. Больше искать нигде не нужно.

pgAdmin4 в узле Функции обозревателя не показывает агрегатные функции скорее всего именно потому, что у них нет кода. Поэтому количество функций может быть меньше чем записей в pg_proc, что может сбивать с толку. А отдельный узел Агрегатные функции так и не реализовали.
...
Рейтинг: 0 / 0
22.06.2020, 14:07
    #39971828
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AGGREGATE (пользовательские)
Павел Лузанов,
Ничего сложного в них нет. Просто там несколько параметров, а если посмотреть описание к ним, то там черт ногу сломит, потому и хотелось бы иметь код этих самых агрегатных функций.
Но тогда просто вставлю закоментированный код в основную функцию и буду знать что пишут.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / AGGREGATE (пользовательские) / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]