Der er to ændringer til dit forsøg. For det første tror jeg ikke, du kan bruge en operator som SFUNC, så du skal definere en navngivet funktion for at udføre krydset, og bruge det.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
For det andet er standardværdien for et område det tomme område -- så krydset vil altid være tomt. Du skal initialisere området til et uendeligt område '[,]'
for at begynde aggregatet. Den samlede definition ser så ud som:
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);