2013-05-29 3 views
1

Я пытаюсь создать функцию, которая будет находить пересечение tsrange, но я не могу заставить его работать:PostgreSQL агрегатная функция за пределы диапазона

CREATE AGGREGATE intersection (tsrange) (
    SFUNC = *, 
    STYPE = tsrange 
) 
+0

О, пожалуйста, напишите, что один к PGXN, когда вы сделали ... Это одна из тех вещей, которые должны быть в ядре ... –

+0

HTTP: //www.postgresql .org/docs/9.2/static/xaggr.html –

ответ

1

Есть две модификации вашей попытки. Во-первых, я не думаю, что вы можете использовать оператор как 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 = '[,]' 
); 
+0

Удивительно, спасибо! –

Смежные вопросы