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数据类型-枚举类型、几何类型、网络地址类型和其他数据类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)