支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

9.12. 網路位址函數與運算子 #

IP網路位址型別 cidrinet 支援 表 9.1 中顯示的常用比較運算子,以及 表 9.39表 9.40 中顯示的特殊運算子和函數。

任何 cidr 值都可以隱式轉換為 inet;因此,下面顯示為對 inet 運算的運算子和函數也適用於 cidr 值。(如果 inetcidr 有單獨的函數,那是因為這兩種情況的行為應該不同。) 此外,允許將 inet 值轉換為 cidr。 完成此操作後,netmask 右側的所有位元都會被靜默歸零,以建立有效的 cidr 值。

表 9.39. IP 位址運算子

運算子

描述

範例

inet << inetboolean

子網路是否嚴格地包含在子網路中? 這個運算子和接下來的四個運算子會測試子網路包含。 他們只考慮兩個位址的網路部分(忽略 netmask 右側的任何位元),並確定一個網路是否與另一個網路相同或為其子網路。

inet '192.168.1.5' << inet '192.168.1/24't

inet '192.168.0.5' << inet '192.168.1/24'f

inet '192.168.1/24' << inet '192.168.1/24'f

inet <<= inetboolean

子網路是否包含在子網路中或與子網路相等?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inetboolean

子網路是否嚴格地包含子網路?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inetboolean

子網路是否包含或等於子網路?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inetboolean

任一子網路是否包含或等於另一個子網路?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

計算位元 NOT。

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

計算位元 AND。

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

計算位元 OR。

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

將偏移量加到位址。

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

將偏移量加到位址。

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

從位址減去偏移量。

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

計算兩個位址的差。

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


表 9.40. IP 位址函數

函數

描述

範例

abbrev ( inet ) → text

建立一個簡短的文字顯示格式。(結果與 inet 輸出函數產生的結果相同;只有與顯式轉換為 text 的結果相比才是簡短的,由於歷史原因,後者永遠不會抑制網路遮罩部分。)

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

建立一個簡短的文字顯示格式。(縮寫包括刪除網路遮罩右側的所有零位元組;更多範例請參見表 8.22。)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

計算位址網路的廣播位址。

broadcast(inet '192.168.1.5/24')192.168.1.255/24

family ( inet ) → integer

傳回位址的系列:IPv4 為 4,IPv6 為 6

family(inet '::1')6

host ( inet ) → text

以文字形式傳回 IP 位址,忽略網路遮罩。

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

計算位址網路的主機遮罩。

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

計算包含給定兩個網路的最小網路。

inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')192.168.0.0/22

inet_same_family ( inet, inet ) → boolean

測試位址是否屬於同一 IP 系列。

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

傳回網路遮罩長度(以位元為單位)。

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

計算位址網路的網路遮罩。

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

傳回位址的網路部分,將網路遮罩右側的所有內容歸零。(這相當於將值轉換為 cidr。)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

設定 inet 值的網路遮罩長度。位址部分不會變更。

set_masklen(inet '192.168.1.5/24', 16)192.168.1.5/16

set_masklen ( cidr, integer ) → cidr

設定 cidr 值的網路遮罩長度。新網路遮罩右側的位址位元設定為零。

set_masklen(cidr '192.168.1.0/24', 16)192.168.0.0/16

text ( inet ) → text

以文字形式傳回未縮寫的 IP 位址和網路遮罩長度。(這與顯式轉換為 text 的結果相同。)

text(inet '192.168.1.5')192.168.1.5/32


提示

abbrevhosttext 函數主要用於為 IP 位址提供替代顯示格式。

MAC 位址類型 macaddrmacaddr8 支援 表 9.1 中顯示的常用比較運算子,以及 表 9.41 中顯示的特殊函數。 此外,它們支援位元邏輯運算子 ~&|(NOT、AND 和 OR),就像上面針對 IP 位址顯示的一樣。

表 9.41. MAC 位址函數

函數

描述

範例

trunc ( macaddr ) → macaddr

將位址的最後 3 個位元組設定為零。 剩餘的前置詞可以與特定的製造商相關聯(使用未包含在 PostgreSQL 中的資料)。

trunc(macaddr '12:34:56:78:90:ab')12:34:56:00:00:00

trunc ( macaddr8 ) → macaddr8

將位址的最後 5 個位元組設定為零。 剩餘的前置詞可以與特定的製造商相關聯(使用未包含在 PostgreSQL 中的資料)。

trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')12:34:56:00:00:00:00:00

macaddr8_set7bit ( macaddr8 ) → macaddr8

將位址的第 7 位元設定為 1,建立所謂的修改型 EUI-64,以包含在 IPv6 位址中。

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef


提交更正

如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。