2013-05-29 59 views
1

我想創建一個函數,將發現的tsrange交集,但我不能得到它的工作聚集函數:PostgreSQL的超範圍

CREATE AGGREGATE intersection (tsrange) (
    SFUNC = *, 
    STYPE = tsrange 
) 
+0

哦,請張貼一個PGXN當你完成......這是那些東西,應該是一個核心... –

+0

HTTP://www.postgresql .org/docs/9.2/static/xaggr.html –

回答

1

有兩個修改您的嘗試。首先,我不認爲你可以使用一個運算符作爲SFUNC,所以你需要定義一個命名函數來做交點,並使用它。

CREATE or REPLACE FUNCTION int_tsrange(a tsrange, b tsrange) 
    returns tsrange language plpgsql as 
     'begin return a * b; end'; 

其次,對於一個範圍的默認值是空範圍 - 這樣的交叉點永遠是空的。您需要將範圍初始化爲無限範圍'[,]'以開始聚合。然後彙總定義是這樣的:

CREATE AGGREGATE intersection (tsrange) (
    SFUNC = int_tsrange, 
    STYPE = tsrange, 
    INITCOND = '[,]' 
); 
+0

太棒了,謝謝! –