如何指定生成的数字范围?
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。
下面的 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。