Il y a deux modifications à votre tentative. Tout d'abord, je ne pense pas que vous puissiez utiliser un opérateur comme SFUNC, vous devez donc définir une fonction nommée pour faire l'intersection, et l'utiliser.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
Deuxièmement, la valeur par défaut d'une plage est la plage vide -- donc l'intersection sera toujours vide. Vous devez initialiser la plage à une plage infinie '[,]'
pour commencer l'agrégat. La définition agrégée ressemble alors à :
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);