Er zijn twee wijzigingen in uw poging. Ten eerste denk ik niet dat je een operator als SFUNC kunt gebruiken, dus je moet een benoemde functie definiëren om de kruising te doen, en die gebruiken.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
Ten tweede is de standaardwaarde voor een bereik het lege bereik - dus het snijpunt is altijd leeg. U moet het bereik initialiseren tot een oneindig bereik '[,]'
om het aggregaat te beginnen. De aggregatiedefinitie ziet er dan als volgt uit:
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);