Có hai sửa đổi cho nỗ lực của bạn. Đầu tiên, tôi không nghĩ rằng bạn có thể sử dụng một toán tử làm SFUNC, vì vậy bạn cần xác định một hàm được đặt tên để thực hiện giao cắt và sử dụng nó.
CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange)
returns tsrange language plpgsql as
'begin return a * b; end';
Thứ hai, giá trị mặc định cho một phạm vi là phạm vi trống - vì vậy giao điểm sẽ luôn trống. Bạn cần khởi tạo phạm vi thành một phạm vi vô hạn '[,]'
để bắt đầu tổng hợp. Định nghĩa tổng hợp sau đó trông giống như sau:
CREATE AGGREGATE intersection ( tsrange ) (
SFUNC = int_tsrange,
STYPE = tsrange,
INITCOND = '[,]'
);