如何指定生成的数字范围?

How to spec a GENERATED NUMRANGE?

下面的 GENERATED 子句都无法在 psql 中编译,错误 42601

正确的语法是什么? (或者不支持生成的数字范围?)

CREATE TABLE lh  (
   l   NUMERIC,
   h   NUMERIC,

 --lhr NUMRANGE GENERATED ALWAYS AS  numrange(l,h)                    STORED
 --lhr NUMRANGE GENERATED ALWAYS AS  (l,h)::NUMRANGE                  STORED
 --lhr NUMRANGE GENERATED ALWAYS AS '(l,h)'::NUMRANGE                 STORED
 --lhr NUMRANGE GENERATED ALWAYS AS  (l::NUMERIC,h:NUMERIC)           STORED
   lhr NUMRANGE GENERATED ALWAYS AS  (l::NUMERIC,h:NUMERIC)::NUMRANGE STORED
);

您可以:

CREATE TABLE lh  (
   l   NUMERIC,
   h   NUMERIC,
   lhr NUMRANGE GENERATED ALWAYS AS  (numrange(l,h)) STORED
);

您需要在 () 中包含表达式。

不确定为什么要这样做,因为它只是复制现有数据,而这些数据可以像 numrange(l,h) AS lhr 一样轻松地包含在查询中。

如果您只是为了 SELECT 方便而使用范围,请使用 VIEW:

CREATE VIEW lh_range AS
SELECT l, h, numrange(l, h) AS lhr
FROM lh

参见live demo