postgresql----網絡地址類型和函數

本人對網絡這塊實在是搞不清楚,要是能有人推薦一下資料就行了!不知道有沒有跟我同樣呢?!因此在這裏先貼一點從其餘地方搞來的一些IPv4的東東。html

IPv4主要包括一下5類地址sql

A類:網絡

0 7位 網絡號 24位 主機號

B類:函數

1 0 14位 網絡號 16位 主機號

C類:post

1 1 0 21位 網絡號 8位 主機號

D類:性能

1 1 1 0 28位 多播組號

E類:spa

1 1 1 1 0 27位 留待後用

 

由上表能夠看出一個IPv4地址使用32位二進制表示,使用時寫成4個十進制數,每一個十進制佔用8位,每一個十進制間用句點分隔。從上表還能夠看出各種IP中前面不一樣的位數都是固定的,因此各種IP的範圍以下:.net

類型 範圍
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個十六進制數表示。postgresql

幾個特殊地址:code

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(inetint) inet 爲inet設置子網掩碼長度 select set_masklen('192.168.1.5/24', 16); 192.168.1.5/16
set_masklen(cidrint) 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(inetinet) boolean 是否屬於相同的地址族 select inet_same_family('192.168.1.5/24', '::1'); f
inet_merge(inetinet) 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

相關文章
相關標籤/搜索