Sql 如何确保Postgres范围类型表完全覆盖一个范围?

Sql 如何确保Postgres范围类型表完全覆盖一个范围?,sql,postgresql,triggers,aggregate-functions,Sql,Postgresql,Triggers,Aggregate Functions,我有一个Postgresnumrange类型表,我正在调用bucket。每个桶上的范围可以是任意大小,但总的来说,它们需要覆盖一定的范围(在我的例子中是[0到2160]) 目前,我有一个使用+的自定义聚合函数,该函数对numrange+numrange重载(SUM未对范围实现)。在聚合之前,需要对行进行排序,以便在累积数据时保持连续。Postgres的CREATE AGGREGATE语句允许SORTOP参数,我提供了结果表明,在调用聚合函数时可以指定顺序,如下所示: SELECT numrang

我有一个Postgres
numrange
类型表,我正在调用
bucket
。每个桶上的范围可以是任意大小,但总的来说,它们需要覆盖一定的范围(在我的例子中是[0到2160])


目前,我有一个使用
+
的自定义聚合函数,该函数对
numrange+numrange
重载(
SUM
未对范围实现)。在聚合之前,需要对行进行排序,以便在累积数据时保持连续。Postgres的
CREATE AGGREGATE
语句允许
SORTOP
参数,我提供了
结果表明,在调用聚合函数时可以指定顺序,如下所示:

SELECT numrange_accum(range order by lower(range))
FROM buckets
INTO bucket_range;

这是在将输入传递到累加器之前对输入进行排序。

对于那些好奇我为什么要尝试覆盖如此大的数字范围的人来说:这是我发现的为20字节二进制ID创建范围的最简单方法。我的应用程序层正在这些二进制ID和整数之间进行转换,以便存储,因为我确实需要以这种方式将这些ID分离到不同的存储桶中。它用于BitTorrent分布式哈希表。
SELECT numrange_accum(range order by lower(range))
FROM buckets
INTO bucket_range;