postgresql----网络地址类型和函数
本人对网络这块实在是搞不清楚,要是能有人推荐一下资料就好了!不知道有没有跟我一样呢?!所以在这里先贴一点从其他地方搞来的一些IPv4的东东。
IPv4主要包括一下5类地址
A类:
| 0 | 7位 网络号 | 24位 主机号 |
B类:
| 1 | 0 | 14位 网络号 | 16位 主机号 |
C类:
| 1 | 1 | 0 | 21位 网络号 | 8位 主机号 |
D类:
| 1 | 1 | 1 | 0 | 28位 多播组号 |
E类:
| 1 | 1 | 1 | 1 | 0 | 27位 留待后用 |
由上表可以看出一个IPv4地址使用32位二进制表示,使用时写成4个十进制数,每个十进制占用8位,每个十进制间用句点分隔。从上表还可以看出各类IP中前面不同的位数都是固定的,所以各类IP的范围如下:
| 类型 | 范围 |
| A | 0.0.0.0--127.255.255.255 |
| B | 128.0.0.0--191.255.255.255 |
| C | 192.0.0.0--233.255.255.255 |
| D | 224.0.0.0--239.255.255.255 |
| E | 240.0.0.0--247.255.255.255 |
IPv6地址长128位,分为8组,每组使用4个十六进制数表示。
几个特殊地址:
127.0.0.1 IPv4环回地址
::1 IPv6环回地址
0.0.0.0/0 表示所有网络段
什么是网络地址?主机地址?子网掩码?
0.0.0.0/8 前8位为网络号,后24位为主机号,子网掩码为255.0.0.0,整个表示的主机地址范围是0.0.0.0到0.255.255.255。
主机地址应该就是网络中一个具体主机的IP地址。
子网掩码应该就是网络号全为1,主机号全为0,所以转换为十进制后0.0.0.0/8的子网掩码就是255.0.0.0。
那网络地址到底是个什么鬼呢?参考下面链接的博文解释
网络地址:把IP地址转成二进制和子网掩码进行与运算(逻辑与:0&0=0;0&1=0;1&0=0;1&1=1 )
仍使用下面博文中的例子,演示如何计算网络地址
主机地址:202.112.14.137,子网掩码:255.255.255.224
把主机地址和子网掩码分别使用二进制表示
主机:select 202::bit(8)||112::bit(8)||14::bit(8)||137::bit(8);
11001010011100000000111010001001
掩码:select 255::bit(8)||255::bit(8)||255::bit(8)||224::bit(8);
11111111111111111111111111100000
按位与计算:select B'11001010011100000000111010001001' & B'11111111111111111111111111100000';
结果:11001010011100000000111010000000
使用十进制表示:202.112.14.128
select B'11001010'::int||'.'||B'01110000'::int||'.'||B'00001110'::int||'.'||B'10000000'::int;
参考:http://blog.csdn.net/leichelle/article/details/8217022
以上还是请大家去查找一下官方正规的资料,千万不要被我误导了,因为我真的对网络这块不清楚。
虽然使用CHAR类型也能存储网络地址,但是CHAR本身是不会校验存储的网络地址是否合法的,且听说postgresql提供的网络地址类型对网络地址数据处理性能更高。
回到正文:
postgresql提供的网络地址类型有inet,cidr,macaddr三种类型用于存储网络地址和MAC地址数据。
| 名字 | 存储空间 | 描述 |
| inet | 7或19字节 | IPv4或IPv6主机和网络地址 |
| cidr | 7或19字节 | IPv4或IPv6网络地址 |
| macaddr | 6字节 | MAC地址 |
inet
inet保存主机的IPv4或IPv6地址,以及一个可选的等效子网。该类型的输入格式是address/y,这里的address是IPv4或者IPv6地址y是子网掩码的二进制位数。如果/y部分未填,则子网掩码对IPv4而言是32对IPv6而言是128,所以该值表示只有一台主机。显示时,如果该值表示只有一台主机,/y将不会显示。
示例:
test=# select inet'192.168.31/24';
inet
-----------------
192.168.31.0/24
(1 row) test=# select inet'192.168.31.1/32';
inet
--------------
192.168.31.1
(1 row) test=# select inet'192.168.31.1';
inet
--------------
192.168.31.1
(1 row)
test=# select inet'192.168.31/24';
inet
-----------------
192.168.31.0/24
(1 row)
cidr
基本和inet相同,inet和cidr类型之间的基本区别是inet接受子网掩码,而cidr不接受。
示例:
test=# select cidr'192.168.31/24';
cidr
-----------------
192.168.31.0/24
(1 row) test=# select cidr'192.168.31.1/32';
cidr
-----------------
192.168.31.1/32
(1 row) test=# select cidr'192.168.31.1';
cidr
-----------------
192.168.31.1/32
(1 row) test=# select cidr'192.168.31/24';
cidr
-----------------
192.168.31.0/24
(1 row)
和inet的区别
test=# select inet'192.168.31.1/24';
inet
-----------------
192.168.31.1/24
(1 row) test=# select cidr'192.168.31.1/24';
ERROR: invalid cidr value: "192.168.31.1/24"
LINE 1: select cidr'192.168.31.1/24';
^
DETAIL: Value has bits set to right of mask.
macaddr
示例:
test=# select macaddr'08:00:2b:01:02:03';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08-00-2b-01-02-03';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08002b:010203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08002b-010203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'0800.2b01.0203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row) test=# select macaddr'08002b010203';
macaddr
-------------------
08:00:2b:01:02:03
(1 row)
cidr和inet操作符
| 操作符 | 描述 | 示例 | 结果 |
| < | 小于 | select inet '192.168.1.5' < inet '192.168.1.6'; | t |
| <= | 小于或等于 | select inet '192.168.1.5' <= inet '192.168.1.5'; | t |
| = | 等于 | select inet '192.168.1.5' = inet '192.168.1.5'; | t |
| >= | 大于或等于 | select inet '192.168.1.5' >= inet '192.168.1.5'; | t |
| > | 大于 | select inet '192.168.1.5' > inet '192.168.1.4'; | t |
| <> | 不等于 | select inet '192.168.1.5' <> inet '192.168.1.4'; | t |
| << | 包含于 | select inet '192.168.1.5' << inet '192.168.1/24'; | t |
| <<= | 包含于或等于 | select inet '192.168.1/24' <<= inet '192.168.1/24'; | t |
| >> | 包含 | select inet '192.168.1/24' >> inet '192.168.1.5'; | t |
| >>= | 包含或等于 | select inet '192.168.1/24' >>= inet '192.168.1/24'; | t |
| && | 包含或包含于 | select inet '192.168.1/24' && inet '192.168.1.80/28' | t |
| ~ | 位非 | select ~ inet '192.168.1.6'; | 63.87.254.249 |
| & | 位与 | select inet '192.168.1.6' & inet '0.0.0.255'; | 0.0.0.6 |
| | | 位或 | select inet '192.168.1.6' | inet '0.0.0.255'; | 192.168.1.255 |
| + | 加 | select inet '192.168.1.6' + 25; | 192.168.1.31 |
| - | 减 | select inet '192.168.1.43' - 36; | 192.168.1.7 |
| - | 减 | select inet '192.168.1.43' - inet '192.168.1.19'; | 24 |
cidr和inet函数
| 函数 | 返回类型 | 描述 | 示例 | 结果 |
| abbrev(inet) | text | 显示为文本格式 | select abbrev(inet '10.1.0.0/16'); | 10.1.0.0/16 |
| abbrev(cidr) | text | 显示为文本格式 | select abbrev(cidr '10.1.0.0/16'); | 10.1/16 |
| broadcast(inet) | inet | 网络广播地址 | select broadcast('192.168.1.5/24'); | 192.168.1.255/24 |
| family(inet) | int | 获取地址族,4位IPv4,6为IPv6 | select family('::1'); | 6 |
| host(inet) | text | 抽取IP地址,并以text显示 | select host('192.168.1.5/24'); | 192.168.1.5 |
| hostmask(inet) | inet | 为网络构造主机掩码 | select hostmask('192.168.23.20/30'); | 0.0.0.3 |
| masklen(inet) | int | 抽取掩码长度 | select masklen('192.168.1.5/24'); | 24 |
| netmask(inet) | inet | 为网络构造子网掩码 | select netmask('192.168.1.5/24'); | 255.255.255.0 |
| network(inet) | cidr | 抽取地址的网络部分 | select network('192.168.1.5/24'); | 192.168.1.0/24 |
| set_masklen(inet, int) | inet | 为inet设置子网掩码长度 | select set_masklen('192.168.1.5/24', 16); | 192.168.1.5/16 |
| set_masklen(cidr, int) | cidr | 为cidr设置子网掩码长度 | select set_masklen('192.168.1.0/24'::cidr, 16); | 192.168.0.0/16 |
| text(inet) | text | 将IP地址和掩码长度抽取为文本 | select text(inet '192.168.1.5'); | 192.168.1.5/32 |
| inet_same_family(inet, inet) | boolean | 是否属于相同的地址族 | select inet_same_family('192.168.1.5/24', '::1'); | f |
| inet_merge(inet, inet) | cidr | 包括两个入参地址的最小网络地址 | select inet_merge('192.168.1.5/24', '192.168.2.5/24'); | 192.168.0.0/22 |
macaddr函数
| 函数 | 返回类型 | 描述 | 示例 | 结果 |
| trunc(macaddr) | macaddr | 将mac地址后3个字节设置为0 |
select trunc(macaddr '12:34:56:78:90:ab'); |
12:34:56:00:00:00 |
macaddr 类型还支持标准关系操作符( > , <= 等)用于词法排序,和按位运算符( ~ , & 和 | )非,与和或。
原文链接:https://www.postgresql.org/docs/9.6/static/functions-net.html
postgresql----网络地址类型和函数的更多相关文章
- Postgres 9.11 网络地址类型函数和操作符
9.11. 网络地址类型函数和操作符 Table 9-31 显示了可以用于 cidr 和 inet 的操作符. 操作符 <<,<<= >>,和 >>= ...
- PostgreSQL的时间/日期函数使用
PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...
- [转] PostgreSQL的时间/日期函数使用
PS:http://blog.csdn.net/love_rongrong/article/details/6712883 字符串模糊比较 日期类型的模糊查询是不能直接进行的,要先转换成字符串然后再查 ...
- 根据MAC地址获取网络地址及ZDP_NwkAddrReq函数的用法
1..对于设备需要获取本设备的网络地址和MAC地址: NLME_GetShortAddr()——返回本设备的16位网络地址 NLME_GetExtAddr()—— 返回本设备的64位扩展地址 2.使 ...
- PostgreSQL学习手册(五) 函数和操作符
PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符: 常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符: 下面是Post ...
- [转帖]PostgreSQL的时间/日期函数使用
PostgreSQL的时间/日期函数使用 https://www.cnblogs.com/mchina/archive/2013/04/15/3010418.html 这个博客的 文章目录比上一个好十 ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- YUI的类型判断函数
1.首先定义一个关于类型的对象,及相关变量 类型判断对象 ar L = Y.Lang || (Y.Lang = {}), STRING_PROTO = String.prototype, TOSTRI ...
- 函数的类型:函数也是类型 (*)->*
函数的类型:函数也是类型 (*)->* 函数类型作为类型可以定义变量,使得函数变量具有可替代性,这个是高阶函数的编程基础. 使用函数的类型可以定义函数的变量,并用函数给这个变量赋值: 每一个函数 ...
随机推荐
- ITIL之“变更管理”
首先要说明的是ITIL的变更是指“上线系统的变更”,而不是指系统建设的变更. ITIL的变更的流程如下: 整个变更管理在实际操作中有几个注意点: 1. 现存的企业中,变更咨询委员会(CAB)可能只有信 ...
- python2内置属性
# encoding: utf-8 # module __builtin__ # from (built-in) # by generator 1.145 from __future__ import ...
- MyBatis 支持的扩展点(version:3.2.7)
从 [MyBatis 原码解析(version:3.2.7)] 中,我们得知,MyBatis去执行SQL都是通过 DefaultSqlSession 中的工具方法去执行的. 那么问题来了,MyBati ...
- IIS------如何安装IIS
1.打开“控制面板”->“程序”->“打开或关闭Windows功能” 2.如图所示: 3.如图所示: 4.点击确定,配置完成
- org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'parentId' in 'class java.lang.String'
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ' ...
- UITextField中文输入法输入时对字符长度的限制 输入时对字符类型的限制
检索一个字符串的长度的话:直接用 length,去进行判断就行了, 如果要检索字符串是否是自己要限制的类型的话,可以用正则表达式: 举个例子: 匹配9-15个由字母/数字组成的字符串的正则表达式: ...
- 错误 error C2678: 二进制“<”: 没有找到接受“const card”类型的左操作数的运算符(或没有可接受的转换)
错误出现的地方如下 而我又重载了<运算符,但是我没有将<运算符重载函数定义成const类型,此处是const _Ty&,不可以调用非const成员函数 而且,一般而言,像<, ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
0x01 背景 首先恭喜Seay法师的力作<代码审计:企业级web代码安全架构>,读了两天后深有感触.想了想自己也做审计有2年了,决定写个PHP代码审计实例教程的系列,希望能够帮助到新人更 ...
- 新唐ISP操作步骤(转)
1,电脑上装上“NuMicro_ICP_Programming_Tool_v1.18.5320.zip”:2,把目标板通过SWD口的NU-LINK连接到电脑的USB口上:3,打开桌面的“NuMicro ...
- iOS - UITextView放在自定义cell里面-自适应高度
textView放在自定义cell里面-自适应高度 1,textView有个属性 scrollEnabled 要设置为NO; 2,设置tableview的时候 添加这两行代码: self.tabl ...