Váš pokus má dvě modifikace. Zaprvé, nemyslím si, že můžete použít operátor jako SFUNC, takže musíte definovat pojmenovanou funkci pro provedení průniku a použít ji.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
Za druhé, výchozí hodnota pro rozsah je prázdný rozsah -- takže průsečík bude vždy prázdný. Rozsah je třeba inicializovat na nekonečný rozsah '[,]'
k zahájení agregace. Souhrnná definice pak vypadá takto:
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);