Ada dua modifikasi untuk usaha Anda. Pertama, saya rasa Anda tidak dapat menggunakan operator sebagai SFUNC, jadi Anda perlu mendefinisikan fungsi bernama untuk melakukan perpotongan, dan menggunakannya.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
Kedua, nilai default untuk rentang adalah rentang kosong -- jadi persimpangan akan selalu kosong. Anda perlu menginisialisasi rentang ke rentang tak terbatas '[,]'
untuk memulai agregat. Definisi agregat kemudian terlihat seperti:
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);