2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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。執行轉換時,會靜默地將網路掩碼右側的任何位清零,以建立有效的 cidr 值。

表 9.39. IP 地址運算子

運算子

描述

示例

inet << inetboolean

子網是否嚴格包含在另一個子網中?此運算子以及接下來的四個運算子用於測試子網包含關係。它們只考慮兩個地址的網路部分(忽略網路掩碼右側的任何位),並判斷一個網路是否與另一個網路相同或為其子集。

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

計算按位非。

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

計算按位與。

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

計算按位或。

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 中所示的專用函式。此外,它們還支援按位邏輯運算子 ~&|(非、與和或),就像上面為 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 位設定為一,建立所謂的修改後的 EUI-64,用於包含在 IPv6 地址中。

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


提交更正

如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處,或需要進一步澄清之處,請使用 此表格 來報告文件問題。