2019独角兽企业重金招聘Python工程师标准>>>

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 | Monday16486 |             2 | Tuesday16486 |             3 | Wednesday16486 |             4 | Thursday16486 |             5 | Friday16486 |             6 | Saturday16486 |             7 | Sunday
(7 行记录)postgres=#---演示插入数据
postgres=# create table testweekday(id int,week weekday);
CREATE TABLE
postgres=# insert into testweekday values(1,'Sunday'),(2,'Monday');
INSERT 0 2
postgres=#

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

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

postgres=# insert into testweekday values(3,'Tuesday'),(4,'Thursday');
INSERT 0 2
postgres=# select week from testweekday;week
----------SundayMondayTuesdayThursday
(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 TABLE
postgres=# insert into testgeometry(testpoint,testline,testbox) values('(1,0)',null,null),(null,'((1,2),(2,2))',null),(null,null,'((0,0),(1,1))');
INSERT 0 3
postgres=#

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

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

postgres=# create table networkaddress(testcidr cidr,testinet inet);
CREATE TABLE
postgres=#
postgres=# insert into networkaddress values('192.168.0.0/24','192.168.0.0/24');
INSERT 0 1
postgres=# insert into networkaddress values('192.168.0.0/16','192.168.0.0/16');
INSERT 0 1
postgres=# insert into networkaddress values('192.168.0.0/16','192.168.0.0/8');
INSERT 0 1
postgres=# insert into networkaddress values('192.168.0.1','192.168.0.1');
INSERT 0 1
postgres=# select testcidr,testinet from networkaddress;testcidr    |    testinet
----------------+----------------192.168.0.0/24 | 192.168.0.0/24192.168.0.0/16 | 192.168.0.0/16192.168.0.0/16 | 192.168.0.0/8192.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 1
postgres=# select testcidr,testinet from networkaddress;testcidr    |    testinet
----------------+----------------192.168.0.0/24 | 192.168.0.0/24192.168.0.0/16 | 192.168.0.0/16192.168.0.0/16 | 192.168.0.0/8192.168.0.1/32 | 192.168.0.1192.168.0.0/16 | 192.168.0.1192.168.0.0/16 | 192.168.0.0/16192.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 TABLE
postgres=# insert into testmacaddress values('00-00-00-00-00-C0'),('00-00-00-00-00-c1');
INSERT 0 2
postgres=# insert into testmacaddress values('0000-0000-00C0'),('00-00-00-00-00-c1');
INSERT 0 2
postgres=# insert into testmacaddress values('000000-0000C0'),('00-00-00-00-00-c1');
INSERT 0 2
postgres=# insert into testmacaddress values('0000.0000.00C0'),('00-00-00-00-00-c1');
INSERT 0 2
postgres=# insert into testmacaddress values('0000.0000.00C0'),('00-00-00-00-00-c1');
INSERT 0 2
postgres=# select * from testmacaddress;testmacaddr
-------------------00:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c1
(10 行记录)postgres=#

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

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

转载于:https://my.oschina.net/u/1011130/blog/1570933

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

  1. 几何畸变的类型_第七讲 几何纠正(摄影测量与遥感).pdf

    第七讲 几何纠正(摄影测量与遥感) 第七讲:遥感数据预处理 第七讲:遥感数据预处理 --几何纠正 --几何纠正 几何纠正 几何纠正 几何纠正 • 遥感影像一般需要经过几何纠正的预处理去除 • 遥感影像 ...

  2. mysql 人名用什么类型_如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  3. mysql数据库表格数据类型_MYSQL数据库数据表字段类型含义解释

    MySQL数据表中的数据类型,它可以被分为3类:数字类型.日期和时间类型.字符串(字符)类型. 由MySQL支持的列类型列在下面.下列代码字母用于描述中: M :指出最大的显示尺寸.最大的合法的显示尺 ...

  4. c++ enum 给定类型_讲解C++中的枚举类型以及声明新类型的方法

    C++枚举类型如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内.声明枚举类型用 ...

  5. 下标要求数组或指针类型_「IEC 61131-3」衍生数据类型

    衍生数据类型是用户在基本数据类型的基础上,建立的由用户自定义的数据类型,与基本数据类型所使用的相同方法对变量进行声明. 数组 数组是多个相同类型数据的有序集合.组成数组的各个变量称为数组的元素,用于区 ...

  6. PHP标量类型中整型类型的,PHP数据类型概述

    在PHP中,有8种基本数据类型和一些伪类型,其中基本数据类型又分为标量类型.复合类型和特殊类型.相对C#,类型少了不少,但同样可实现很多功能,也不比其它语言差. 一.基本类型 1.标量类型(4种) 1 ...

  7. python中不同类型的数据不能相互运算_python数据类型和运算

    常见数据类型和运算 1 变量的命名规范 '''只能以字母,数字,下划线组成,不能以数字开头.命名时 避免与系统关键字重复,关键字:['and', 'as', 'assert', 'break', 'c ...

  8. python变量类型函数_python中的变量和数据类型

    一.变量定义:变量是计算机内存中的一块区域,存储规定范围内的值,值 可以改变,通俗的说变量就是给数据起个名字. 二.变量命名规则: 1. 变量名由字母.数字.下划线组成 2. 数字不能开头 3. 不可 ...

  9. Python当中的a += a 与 a = a + a 的区别,可变类型与不可变类型的数据类型,引用传参...

    a += a 与 a = a + a 的区别 可变类型a = a + a 的示例 In [58]: a = [11,22]In [59]: id(a) Out[59]: 140702917607688 ...

最新文章

  1. 【经验】广西集体户口迁回农村原籍超级攻略
  2. 直接拿来用!最火的Android开源项目(完结篇)(转)
  3. Android自定义滑动进度条,Android自定义View实现圆形水波进度条
  4. .NET应用架构设计—表模块模式与事务脚本模式的代码编写
  5. GBDT+LR算法入门理解
  6. Java后台日常学习环境搭建
  7. 计算机配件有没先后顺序,内存插槽是否有优先顺序?
  8. Android之APP跳转权限设置界面
  9. 背单词App开发日记1
  10. 移动磁盘提示设备未就绪文件怎么恢复
  11. C语言求任意数的阶层
  12. 我的世界服务器无线刷物品,《我的世界》1.12无限刷物品方法图文教学
  13. 【深度学习】BioBERT文章翻译及个人感悟
  14. java计算机毕业设计体育新闻网站源码+系统+数据库+lw文档+mybatis+运行部署
  15. 重装系统计算机无法启动,重装系统电脑无法开机怎么办?重装系统后电脑无法开机常见故障...
  16. win10系统下Bitlocker密码忘了的具体解决方法
  17. Deprecated Gradle features were used in this build, making it incompatible with Gradle
  18. 教您用xmanager启动Linux上的图形界面程序
  19. 单片机变成了业余爱好
  20. 次世代PBR流程美术作品

热门文章

  1. Eclipse 中 按 Ctrl+Shift+F 格式化代码时每行容纳的字符数
  2. 【Android】系统目录理解
  3. WebKit 内核源码分析 (三) Page
  4. 阿里Java面试题剖析:为什么使用消息队列?消息队列有什么优点和缺点?
  5. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ
  6. Android:解决Button中的文字全部大写
  7. c++学习笔记之基础篇
  8. [转] 小结js屏幕、浏览器、页面大小(三)———拖拽
  9. ubuntu 虚拟机安装
  10. PAT (Basic Level) Practise:1037. 在霍格沃茨找零钱