PostgreSQL内置的范围数据类型

360 阅读5分钟

连续的数据系列被称为范围数据。PostgreSQL数据库支持一系列的数据类型,这是该数据库的一个独特功能。范围和多范围数据类型是在PostgreSQL第14版中引入的。这种数据类型存储低值和高值。整数或时间戳值可以存储在这种数据类型的字段中。当需要在一个单一的范围值中存储许多值时,最好使用范围数据类型。下面提到了PostgreSQL支持的内置数据类型的范围。

范围类型目的
int4range它定义了整数的范围。
int4multirange它定义了多范围的整数。
int8range它定义了大整数的范围。
int8multirange它定义了多范围的大整数。
numrange它定义了数字的范围。
nummultirange它定义了数字的多范围。
tsrange它定义了不含时区的时间戳范围。
tsmultirange它定义了不含时区的时间戳的多范围。
tstzrange它定义了带有时区的时间戳范围。
tstzmultirange它定义了带有时区的时间戳的多范围。
daterange它定义了日期的范围。
datemultirange它定义了日期的多范围。

前提条件。

在执行本教程中的SQL语句之前,你必须在Linux操作系统上安装最新版本的PostgreSQL包。运行下面的命令来安装和启动PostgreSQL。

sudoaptget\-yinstallpostgresqlpostgresqlcontribsudo apt-get \-y installpostgresql postgresql-contrib sudosystemctl start postgresql.service

运行下面的命令,以root权限登录到PostgreSQL。

$ sudo -upostgres psql

PostgreSQL的范围数据类型例子。

在创建任何具有布尔数据类型的表之前,你必须先创建一个PostgreSQL数据库。因此,运行下面的命令来创建一个名为**"testdb "的数据库。**

# CREATE DATABASE testdb;

创建数据库后会出现以下输出。

A. 使用整数范围数据类型
在当前数据库中创建一个名为**'tbl_intRange'的表,有两个字段。这里,第一个字段名是id**,它是表的主键。当有新的记录插入时,这个字段的值将自动递增。第二个字段名是int_range,数据类型是INT4RANGE

# CREATE TABLE tbl_intRange (
idSERIAL PRIMARY KEY,
int_range INT4RANGE) 。

如果表被成功创建,将出现以下输出。

运行下面的INSERT查询,向tbl_intRange表中插入三条记录。

# INSERT INTO tbl_intRange (int_range)
VALUES('[1, 10)':int4range),
('[1, 20)'::int4range),
('[1, 30)'::int4range)。

执行上述查询后会出现以下输出。

运行下面的SELECT查询来读取tbl_intRange中的所有记录**。**

# SELECT*FROM tbl_intRange;

运行下面的SELECT查询,从tbl_intRange中读取那些记录,其中int_range大于12。

# SELECT*FROM tbl_intRange WHERE int_range@>12;

执行上述SELECT查询后,将出现以下输出。

B. 数字范围数据类型的使用
在当前数据库中创建一个名为**'tbl_numRange'的表,有两个字段。这里,第一个字段名是id**,是表的主键。当有新的记录插入时,这个字段的值将自动递增。第二个字段名是num_range,数据类型是NUMRANGE

# CREATE TABLE tbl_numRange (
idSERIAL PRIMARY KEY,
num_range NUMRANGE) 。

运行下面的INSERT查询,向tbl_numRange表中插入三条记录。

# INSERT INTO tbl_numRange (num_range)
VALUES(numrange(20, 40)),
(numrange(100,500) );

执行上述查询后,将出现以下输出。

运行下面的SELECT查询,将从tbl_numRange中读取所有记录。

# SELECT*FROM tbl_numRange;

执行上述SELECT查询后,将出现以下输出。

C. 使用时间戳范围数据类型
在当前数据库中创建一个名为**'tbl_timeRange'的表,有两个字段。这里,第一个字段名是id**,它是表的主键。当有新的记录插入时,这个字段的值会自动递增。第二个字段名是timeRange,数据类型是TSRANGE

# CREATE TABLE tbl_timeRange (
idSERIAL PRIMARY KEY,
timeRange TSRANGE);

运行下面的INSERT查询,向tbl_timeRange表中插入三条记录。

# INSERT INTO tbl_timeRange ( timeRange)
VALUES('[2022-05-20 10:20:30, 2022-05-21 10:20:15)'),
('[2022-09-13 9:30:15, 2022-09-14 11:10:20)')。

执行上述查询后,将出现以下输出。

运行下面的SELECT查询,将从tbl_timeRange中读取所有记录**。**

# SELECT*FROM tbl_timeRange;

执行上述SELECT查询后,将出现以下输出结果。

D. 使用日期范围数据类型
在当前数据库中创建一个名为**'tbl_dateRange'的表,有两个字段。这里,第一个字段名是id**,是表的主键。当有新的记录插入时,这个字段的值将会自动增加。第二个字段名是date_range,数据类型是DATERANGE

# CREATE TABLE tbl_dateRange (
idSERIAL PRIMARY KEY,
date_range DATERANGE);

运行下面的INSERT查询,向tbl_dateRange表中插入三条记录。

# INSERT INTO tbl_dateRange ( date_range)
VALUES('[2022-05-20, 2022-05-21)'),
('[2022-07-10, 2022-07-15)'),
('[2022-12-01, 2022-12-16)');

执行上述查询后,将出现以下输出。

运行下面的SELECT查询,它将从tbl_dateRange中读取所有记录**。**

# SELECT*FROM tbl_dateRange;

运行下面的SELECT查询,从tbl_dateRange中读取那些date_range字段的日期值大于**'2002-07-13'的记录。**

# SELECT*FROM tbl_dateRange WHERE date_range@>'2022-07-13'::date;

执行上述查询后会出现以下输出。

结论

在本教程中,通过使用多个表,已经展示了PostgreSQL的范围数据类型的不同用途。 新的PostgreSQL用户在读完本教程后将能够在他们的表中使用范围数据类型。