# 8.9.网络地址类型

8.9.1.内特

8.9.2.苹果酒

8.9.3.内特与。苹果酒

8.9.4.马卡德尔

8.9.5.macaddr8

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