PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型

PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型,第1张

概述PostgreSQL还有很多数据类型,例如枚举类型、几何类型、网络地址和MAC地址类型、XML类型、JSON类型、数组类型、范围(range)类型、复合数据类型、组合类型、对象标识符等。复合数据类型等价于其他数据库自定义数据类型。 首先介绍枚举类型。 ---创建weekday枚举postgres=# create type weekday as enum('Monday','Tuesday','

Postgresql还有很多数据类型,例如枚举类型、几何类型、网络地址和MAC地址类型、XML类型、JsON类型、数组类型、范围(range)类型、复合数据类型、组合类型、对象标识符等。复合数据类型等价于其他数据库自定义数据类型。

首先介绍枚举类型。

---创建weekday枚举postgres=# create type weekday as enum('Monday','Tuesday','Wednesday','Thursday','FrIDay','Saturday','Sunday');CREATE TYPE---查看枚举weekday信息postgres=# \dT+                                 数据类型列表 架构模式 |  名称   | 内部名称 | 大小 |   成员    |  拥有者  | 存取权限 | 描述----------+---------+----------+------+-----------+----------+----------+------ public   | weekday | weekday  | 4    | Monday   +| postgres |          |          |         |          |      | Tuesday  +|          |          |          |         |          |      | Wednesday+|          |          |          |         |          |      | Thursday +|          |          |          |         |          |      | FrIDay   +|          |          |          |         |          |      | Saturday +|          |          |          |         |          |      | Sunday    |          |          |(1 行记录)---另一种查询枚举方法postgres=# select * from pg_enum; enumtypID | enumsortorder | enumlabel-----------+---------------+-----------     16486 |             1 | Monday     16486 |             2 | Tuesday     16486 |             3 | Wednesday     16486 |             4 | Thursday     16486 |             5 | FrIDay     16486 |             6 | Saturday     16486 |             7 | Sunday(7 行记录)postgres=#---演示插入数据postgres=# create table testweekday(ID int,week weekday);CREATE tablepostgres=# insert into testweekday values(1,'Sunday'),(2,'Monday');INSERT 0 2postgres=#

Postgresql枚举类型类似于C#枚举数据类型,用户输入数据必须符合已有数据,无法输入其他值。枚举类型输入值区分大小写,错误输入会导致错误发生。

枚举类型字段可以在表列内比较大小,例如

postgres=# insert into testweekday values(3,'Tuesday'),(4,'Thursday');INSERT 0 2postgres=# select week from testweekday;   week---------- Sunday Monday Tuesday Thursday(4 行记录)postgres=# select min(week),count(week) from testweekday;  min   | count--------+------- Monday |     4(1 行记录)postgres=#

Postgresql支持二维几何数据类型,采用笛卡尔坐标系。如点、直线、线段、矩形和圆等。虚数、极坐标、张量等都是复合数据类型。

postgres=# create table testgeometry(testpoint point,testline line,testBox Box);CREATE tablepostgres=# insert into testgeometry(testpoint,testline,testBox) values('(1,0)',null,null),(null,'((1,2),2))','((0,0),(1,1))');INSERT 0 3postgres=#

[]表示开放路径,()表示闭合路径。闭合路径成环。

Postgresql网络地址数据类型cIDr和inet支持IPv4和和IPv6数据类型,MAC地址数据类型macaddr支持MAC地址。

postgres=# create table networkaddress(testcIDr cIDr,testinet inet);CREATE tablepostgres=#postgres=# insert into networkaddress values('192.168.0.0/24','192.168.0.0/24');INSERT 0 1postgres=# insert into networkaddress values('192.168.0.0/16','192.168.0.0/16');INSERT 0 1postgres=# insert into networkaddress values('192.168.0.0/16','192.168.0.0/8');INSERT 0 1postgres=# insert into networkaddress values('192.168.0.1','192.168.0.1');INSERT 0 1postgres=# select testcIDr,testinet from networkaddress;    testcIDr    |    testinet----------------+---------------- 192.168.0.0/24 | 192.168.0.0/24 192.168.0.0/16 | 192.168.0.0/16 192.168.0.0/16 | 192.168.0.0/8 192.168.0.1/32 | 192.168.0.1(4 行记录)postgres=#

根据测试数据输入结果可知,cIDr和inet子网掩码均可省略,需要注意IPv4子网掩码书写方式为纯数字,范围为0-32。IPv6子网掩码范围为0-128。两者区别在于cIDr会检查输入值正确性,输出时带子网掩码。

postgres=# insert into networkaddress values('192.168.0/16','192.168.0/16');INSERT 0 1---第二个值子网掩码错误postgres=# insert into networkaddress values('192.168.0/16','192.168.0/1');INSERT 0 1postgres=# select testcIDr,testinet from networkaddress;    testcIDr    |    testinet----------------+---------------- 192.168.0.0/24 | 192.168.0.0/24 192.168.0.0/16 | 192.168.0.0/16 192.168.0.0/16 | 192.168.0.0/8 192.168.0.1/32 | 192.168.0.1 192.168.0.0/16 | 192.168.0.1 192.168.0.0/16 | 192.168.0.0/16 192.168.0.0/16 | 192.168.0.0/1(6 行记录)postgres=#---错误写法---postgres=# insert into networkaddress values('192.168.0/16','192.168.0');

输入数据可以不写完全。注意对比错误写法和正确写法区别,对比查询结果。

macaddr储存子网掩码地址,子网掩码是16进制字符,长度为8位,可以接受分段和分隔符,分隔符可以是:或-,可以省略不写。例如00-00-00-00-00-C0每两个字符分段一次,以-作为分隔符,分割长度可以为2、4、6、和8。-和:分隔符长度可以是2和6。.作为分隔符只支持类似0000.0000.00C0格式。

postgres=# create table testmacaddress(testmacaddr macaddr);CREATE tablepostgres=# insert into testmacaddress values('00-00-00-00-00-C0'),('00-00-00-00-00-c1');INSERT 0 2postgres=# insert into testmacaddress values('0000-0000-00C0'),('00-00-00-00-00-c1');INSERT 0 2postgres=# insert into testmacaddress values('000000-0000C0'),('00-00-00-00-00-c1');INSERT 0 2postgres=# insert into testmacaddress values('0000.0000.00C0'),('00-00-00-00-00-c1');INSERT 0 2postgres=# select * from testmacaddress;    testmacaddr------------------- 00:00:00:00:00:c0 00:00:00:00:00:c1 00:00:00:00:00:c0 00:00:00:00:00:c1 00:00:00:00:00:c0 00:00:00:00:00:c1 00:00:00:00:00:c0 00:00:00:00:00:c1 00:00:00:00:00:c0 00:00:00:00:00:c1(10 行记录)postgres=#

推荐:2位长度分隔或无符号分隔。

XML类型、JsON类型、数组类型、范围(range)类型、复合数据类型、组合类型、对象标识符等本文不再加以介绍。

总结

以上是内存溢出为你收集整理的PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型全部内容,希望文章能够帮你解决PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存