Я пытаюсь создать функцию, которая будет находить пересечение tsrange
, но я не могу заставить его работать:PostgreSQL агрегатная функция за пределы диапазона
CREATE AGGREGATE intersection (tsrange) (
SFUNC = *,
STYPE = tsrange
)
Я пытаюсь создать функцию, которая будет находить пересечение tsrange
, но я не могу заставить его работать:PostgreSQL агрегатная функция за пределы диапазона
CREATE AGGREGATE intersection (tsrange) (
SFUNC = *,
STYPE = tsrange
)
Есть две модификации вашей попытки. Во-первых, я не думаю, что вы можете использовать оператор как SFUNC, поэтому вам нужно определить именованную функцию для пересечения и использовать ее.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
Во-вторых, значение по умолчанию для диапазона является пустой диапазон - поэтому пересечение всегда будет пустым. Вам нужно инициализировать диапазон до бесконечного диапазона '[,]'
, чтобы начать агрегат. Совокупное определение тогда выглядит следующим образом:
CREATE AGGREGATE intersection (tsrange) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);
Удивительно, спасибо! –
О, пожалуйста, напишите, что один к PGXN, когда вы сделали ... Это одна из тех вещей, которые должны быть в ядре ... –
HTTP: //www.postgresql .org/docs/9.2/static/xaggr.html –