Има две модификации на вашия опит. Първо, не мисля, че можете да използвате оператор като 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 = '[,]'
);