Det finns två modifieringar av ditt försök. För det första tror jag inte att du kan använda en operator som SFUNC, så du måste definiera en namngiven funktion för att göra korsningen, och använda den.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
För det andra är standardvärdet för ett område det tomma området -- så skärningspunkten kommer alltid att vara tom. Du måste initiera intervallet till ett oändligt intervall '[,]'
för att börja aggregatet. Den aggregerade definitionen ser då ut så här:
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);