如何设置TSTZRANGE Postgres类型的分辨率?



Postgres支持范围类型(permalink),如int4rangetstzrangetstzrange的文档为"Range oftimestamp with time zone"。

时间戳的默认精度是使用6位数字表示秒分数(微秒分辨率),但是我的应用程序通过timestamp (3) with time zone使用3位数字表示时间戳(毫秒)。为了保持一致性,我还想对我的时间段使用毫秒级的分辨率。

默认的tstzrange分辨率是多少?如何配置它?

我试图用tstzrange(3)定义我的表,但这个形式是不支持的。应用于文档中的示例,它看起来像:

CREATE TABLE reservation (
during tstzrange(3),
EXCLUDE USING GIST (during WITH &&)
);

从Postgres 13开始,tstzrange的时间分辨率使用6位数表示秒分(微秒分辨率)。此分辨率不能更改。

要创建具有自定义分辨率的时间戳之间的范围,必须定义一个新的范围类型。下面是创建一个毫秒级分辨率的时间戳范围的查询:

CREATE TYPE tstzrange3 AS RANGE (
subtype = timestamp (3) with time zone
);

这既定义了tstzrange3类型,也定义了同名的构造函数。

你可以像使用其他范围一样使用这个类型:

CREATE TABLE reservation (
during tstzrange3,
EXCLUDE USING GIST (during WITH &&)
);
INSERT INTO reservation(during) VALUES(tstzrange3(NOW(), NULL));

相关内容

  • 没有找到相关文章

最新更新