PostgreSQL:網路地址——型別、運算子和函式

Ryan_Bai發表於2020-12-01

型別

PostgreSQL 提供的資料型別來儲存的 IPv4、IPv6 的地址和MAC地址。這是更好地使用這些型別,而不是純文字型別儲存網路地址,因為這些型別提供輸入錯誤檢查和特殊的操作和函式。

名稱 儲存長度 描述
cidr 7 或 19 bytes IPv4 和 IPv6 網路
inet 7 或 19 bytes IPv4 和 IPv6 hosts 和網路
macaddr 6 bytes MAC 地址
macaddr8 8 bytes MAC 地址(EUI-64 格式)

運算子

運算子 描述 舉例 結果
< 小於 inet '192.168.1.5' < inet '192.168.1.6' TRUE
<= 小於等於 inet '192.168.1.5' <= inet '192.168.1.5' TRUE
= 等於 inet '192.168.1.5' = inet '192.168.1.5' TRUE
>= 大於等於 inet '192.168.1.5' >= inet '192.168.1.5' TRUE
> 大於 inet '192.168.1.5' > inet '192.168.1.4' TRUE
<> 不等於 inet '192.168.1.5' <> inet '192.168.1.4' TRUE
<< 被包含 inet '192.168.1.5' << inet '192.168.1/24' TRUE
<<= 被包含或等於 inet '192.168.1/24' <<= inet '192.168.1/24' TRUE
>> 包含 inet '192.168.1/24' >> inet '192.168.1.5' TRUE
>>= 包含或等於 inet '192.168.1/24' >>= inet '192.168.1/24' TRUE
&& 包含或被包含 inet '192.168.1/24' && inet '192.168.1.80/28' TRUE
~ 按位取反 ~inet '192.168.1.6' 63.87.254.249
& 按位與 inet '192.168.1.6' & inet '0.0.0.255' 0.0.0.6
| 按位或 inet '192.168.1.6' | inet '0.0.0.255' 192.168.1.255
+ inet '192.168.1.6' + 25 192.168.1.31
- inet '192.168.1.43' - 36 192.168.1.7
- 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 型別還支援標準關係運算子( > , <= 等)用於詞法排序,和按位運算子( ~ , & 和 | )非,與和或。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2738426/,如需轉載,請註明出處,否則將追究法律責任。

相關文章