# 8.9.网络地址类型
PostgreSQL提供数据类型来存储IPv4、IPv6和MAC地址,如中所示表8.21。最好使用这些类型而不是纯文本类型来存储网络地址,因为这些类型提供输入错误检查和专门的运算符和函数(请参阅第9.12节).
表8.21.网络地址类型
名称 | 存储大小 | 描述 |
---|---|---|
苹果酒 | 7或19字节 | IPv4和IPv6网络 |
内特 | 7或19字节 | IPv4和IPv6主机和网络 |
马卡德尔 | 6字节 | MAC地址 |
macaddr8 | 8字节 | MAC地址(EUI-64格式) |
分拣时内特
或苹果酒
在数据类型中,IPv4地址总是在IPv6地址之前排序,包括封装或映射到IPv6地址的IPv4地址,例如::10.2.3.4或::ffff:10.4.3.2.
# 8.9.1. 内特
这个内特
类型在一个字段中保存IPv4或IPv6主机地址以及可选的子网。子网由主机地址(“网络掩码”)中存在的网络地址位数表示。如果网络掩码为32,地址为IPv4,则该值不表示子网,仅表示单个主机。在IPv6中,地址长度为128位,因此128位指定一个唯一的主机地址。请注意,如果只接受网络,则应使用苹果酒
输入而不是内特
.
此类型的输入格式为*地址/y
哪里住址
是IPv4或IPv6地址,并且y
是网络掩码中的位数。如果/y
省略部分,对于IPv4,网络掩码为32,对于IPv6,网络掩码为128,因此该值仅代表一台主机。展出的是/y
*如果网络掩码指定了单个主机,则部分将被抑制。
# 8.9.2. 苹果酒
这个苹果酒
类型包含IPv4或IPv6网络规范。输入和输出格式遵循无类Internet域路由约定。指定网络的格式为*地址/y
哪里住址
网络的最低地址是否表示为IPv4或IPv6地址,以及y
是网络掩码中的位数。如果y
*省略,它是使用旧的类网络编号系统的假设计算的,除非它至少足够大,可以包含输入中写入的所有八位字节。如果指定的网络地址的位设置在指定网络掩码的右侧,则会出错。
表8.22展示了一些例子。
表8.22. 苹果酒
键入输入示例
苹果酒 输入 | 苹果酒 输出 | abbrev(`cidr`) |
---|---|---|
192.168.100.128/25 | 192.168.100.128/25 | 192.168.100.128/25 |
192.168/24 | 192.168.0.0/24 | 192.168.0/24 |
192.168/25 | 192.168.0.0/25 | 192.168.0.0/25 |
192.168.1 | 192.168.1.0/24 | 192.168.1/24 |
one hundred and ninety-two point one six eight | 192.168.0.0/24 | 192.168.0/24 |
one hundred and twenty-eight point one | 128.1.0.0/16 | 128.1/16 |
one hundred and twenty-eight | 128.0.0.0/16 | 128.0/16 |
128.1.2 | 128.1.2.0/24 | 128.1.2/24 |
10.1.2 | 10.1.2.0/24 | 10.1.2/24 |
ten point one | 10.1.0.0/16 | 10.1/16 |
ten | 10.0.0.0/8 | 10/8 |
10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 |
2001:4f8:3:ba::/64 | 2001:4f8:3:ba::/64 | 2001:4f8:3:ba/64 |
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 |
::ffff:1.2.3.0/120 | ::ffff:1.2.3.0/120 | ::ffff:1.2.3/120 |
::ffff:1.2.3.0/128 | ::ffff:1.2.3.0/128 | ::ffff:1.2.3.0/128 |
# 8.9.3. 内特
与。苹果酒
两者的本质区别内特
和苹果酒
数据类型是什么内特
接受网络掩码右侧非零位的值,而苹果酒
没有。例如192.168.0.1/24
有效期为内特
但不是为了苹果酒
.
# 提示
如果您不喜欢内特
或苹果酒
值,试试函数主办
, 文本
和阿伯雷夫
.
# 8.9.4. 马卡德尔
这个马卡德尔
类型存储MAC地址,例如以太网卡硬件地址(尽管MAC地址也用于其他目的)。接受以下格式的输入:
“08:00:2b:01:02:03” |
---|
“08-00-2b-01-02-03” |
“08002b:010203” |
“08002b-010203” |
0800.2b01.0203' |
“0800-2b01-0203” |
“08002b010203” |
这些示例都指定了相同的地址。数字接受大写和小写A.
通过f
.输出始终以所示的第一种形式显示。
IEEE Std 802-2001将第二种形式(带连字符)指定为MAC地址的标准形式,并将第一种形式(带冒号)指定为位反转符号,以便08-00-2b-01-02-03=01:00:4D:08:04:0C。如今,这种约定被广泛忽略,并且只适用于过时的网络协议(如令牌环)。PostgreSQL不提供位反转,所有接受的格式都使用规范的LSB顺序。
其余五种输入格式不属于任何标准。
# 8.9.5. macaddr8
这个macaddr8
类型以EUI-64格式存储MAC地址,例如以太网卡硬件地址(尽管MAC地址也用于其他目的)。这种类型可以接受6字节和8字节长度的MAC地址,并以8字节长度的格式存储它们。以6字节格式给出的MAC地址将以8字节长度格式存储,第4字节和第5字节分别设置为FF和FE。请注意,IPv6使用经过修改的EUI-64格式,从EUI-48转换后,第7位应设置为1.功能macaddr8_set7bit
提供了用于进行此更改的。一般来说,任何由成对的十六进制数字(在字节边界上)组成的输入,可选地由一个':'
, '-'
或'.'
,是可以接受的。十六进制数字的数量必须为16(8字节)或12(6字节)。忽略前导和尾随空格。以下是可接受的输入格式示例:
'08:00:2b:01:02:03:04:05' |
---|
“08-00-2b-01-02-03-04-05” |
“08002b:0102030405” |
“08002b-0102030405” |
0800.2b01.0203.0405' |
“0800-2b01-0203-0405” |
“08002b01:0203405” |
“08002b0102030405” |
这些示例都指定了相同的地址。数字接受大写和小写A.
通过f
.输出始终以所示的第一种形式显示。
上面显示的最后六种输入格式不是任何标准的一部分。
要将EUI-48格式的传统48位MAC地址转换为修改后的EUI-64格式,以作为IPv6地址的主机部分,请使用macaddr8_set7bit
如图所示:
SELECT macaddr8_set7bit('08:00:2b:01:02:03');
macaddr8_set7bit