macaddr
MAC(媒体访问控制)地址
当前查看 PostgreSQL 18.6。
PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。
定义
MAC(媒体访问控制)地址
macaddr
- 目录名称
- pg_catalog.macaddr
- 类型 OID
- 829
- 类型种类
- 基础类型
- 声明长度
- 6 字节
- 存储策略
- plain
- 输入函数
- macaddr_in
- 输出函数
- macaddr_out
- 手册中的声明
- macaddr
- 存储大小
- 6 字节
- 手册说明
- MAC地址
中文手册
阅读来源定义
8.9. 网络地址类型
8.9. 网络地址类型
PostgreSQL 提供了用于存储 IPv4、IPv6 和 MAC 地址的数据类型,如表 8.21所示。使用这些数据类型来存储网络地址,比使用纯文本类型更好,因为它们提供了输入错误检查以及专门的操作符和函数(见第 9.12 节)。
表 8.21. 网络地址类型
| 名字 | 存储大小 | 说明 |
|---|---|---|
cidr |
7 或 19 字节 | IPv4 和 IPv6 网络 |
inet |
7 或 19 字节 | IPv4和IPv6主机以及网络 |
macaddr |
6 字节 | MAC地址 |
macaddr8 |
8 字节 | MAC 地址(EUI-64 格式) |
对 inet 或 cidr 排序时,IPv4 地址始终排在 IPv6 地址之前;IPv4 地址封装或映射成的 IPv6 地址也包含在后者中,例如 ::10.2.3.4 或 ::ffff:10.4.3.2。
8.9.1. inet
inet 在一个字段中保存 IPv4 或 IPv6 主机地址,以及可选的子网信息。子网由主机地址中包含的网络地址位数(即“网络掩码”)表示。如果网络掩码为 32 且地址是 IPv4,那么该值表示的不是子网,而只是单个主机。在 IPv6 中,地址长度为 128 位,因此 128 位表示一个唯一的主机地址。请注意,如果你只想接受网络地址,应使用 cidr 类型,而不是 inet。
该类型的输入格式为 address/y,其中 address 是 IPv4 或 IPv6 地址,而 y 是网络掩码中的位数。如果省略 /y 部分,则 IPv4 的网络掩码取 32,IPv6 的网络掩码取 128,因此该值表示单个主机。显示时,如果 /y 部分表示的是单个主机,则它不会被显示出来。
8.9.2. cidr
cidr 类型保存 IPv4 或 IPv6 网络说明。输入和输出格式遵循无类别域间路由(CIDR)约定。指定网络的格式为 address/y,其中 address 是网络最低地址的 IPv4 或 IPv6 表示,而 y 是网络掩码中的位数。如果省略 y,则会按照旧式的分类网络编号系统假设来计算,但至少会大到足以覆盖输入中写出的所有八位组。若指定的网络地址在所给网络掩码右侧仍有置位比特,则会报错。
表 8.22展示了一些示例。
表 8.22. cidr类型输入示例
cidr输入 |
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 |
| 192.168 | 192.168.0.0/24 | 192.168.0/24 |
| 128.1 | 128.1.0.0/16 | 128.1/16 |
| 128 | 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 |
| 10.1 | 10.1.0.0/16 | 10.1/16 |
| 10 | 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 |
inet 和 cidr 两种数据类型的本质区别在于:inet 接受网络掩码右侧仍含有非零位的值,而 cidr 不接受。例如,192.168.0.1/24 对 inet 是有效的,但对 cidr 无效。
提示
如果你不喜欢 inet 或 cidr 值的输出格式,可以试试 host、text 和 abbrev 函数。
8.9.4. macaddr
macaddr类型存储 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 Standard 802-2001 将所示的第二种形式(使用连字符)规定为 MAC 地址的规范形式,将第一种形式(使用冒号)规定为按位反转、最高有效位优先的表示形式,因此 08-00-2b-01-02-03 = 10:00:D4:80:40:C0。如今,这一约定已普遍被忽略,只与过时的网络协议(如令牌环)有关。PostgreSQL 不作位反转处理;所有接受的格式都使用规范的最低有效位(LSB)顺序。
剩下的五种输入格式不属于任何标准。
8.9.5. macaddr8
macaddr8 存储 EUI-64 格式的 MAC 地址,例如以太网卡的硬件地址,但 MAC 地址也有其他用途。此类型接受长度为 6 或 8 字节的 MAC 地址,并统一以 8 字节格式存储。6 字节输入转换为 8 字节存储时,第 4 和第 5 字节分别设为 FF 和 FE。IPv6 使用修改后的 EUI-64 格式,从 EUI-48 转换后应将第 7 位设为一,可使用 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:02030405' |
'08002b0102030405' |
这些示例都指定同一个地址,数字 a 到 f 可使用大写或小写。输出始终采用所示的第一种格式。
上述的后六种输入格式不属于任何标准。
要将 EUI-48 格式的传统 48 位 MAC 地址转换为修改后的 EUI-64 格式,以便作为 IPv6 地址的主机部分,可使用 macaddr8_set7bit,如下所示:
SELECT macaddr8_set7bit('08:00:2b:01:02:03');
macaddr8_set7bit
-------------------------
0a:00:2b:ff:fe:01:02:03
(1 row)
系统目录属性
此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。
oid829descrXX:XX:XX:XX:XX:XX, MAC addresstypacl_null_typlen6typelem0typnamemacaddrtypsendmacaddr_sendtyptypebtypalignityparray0typbyvalftypdelim','typinputmacaddr_intypmodin-typndims0typownerPOSTGREStyprelid0typmodout-typoutputmacaddr_outtyptypmod-1typanalyze-typdefault_null_typnotnullftypreceivemacaddr_recvtypstorageptypbasetype0typcategoryUtypcollation0typisdefinedttypnamespacepg_catalogtypsubscript-typdefaultbin_null_array_type_oid1040typispreferredfarray_type_name_macaddr
类型转换 2
与此类型相关的显式 pg_cast 记录。PostgreSQL 还支持 pg_cast 之外的类型转换,缺少记录不能证明转换不可能。
运算符重载 9
每种操作数签名均为独立重载。实现函数和返回类型来自同一源码构建。
| 运算符 | 左操作数 | 右操作数 | 返回类型 | 含义 | 实现函数 |
|---|---|---|---|---|---|
= | macaddr | macaddr | bool | 等于 | macaddr_eq |
<> | macaddr | macaddr | bool | 不等于 | macaddr_ne |
< | macaddr | macaddr | bool | 小于 | macaddr_lt |
<= | macaddr | macaddr | bool | 小于等于 | macaddr_le |
> | macaddr | macaddr | bool | 大于 | macaddr_gt |
>= | macaddr | macaddr | bool | 大于等于 | macaddr_ge |
~ | 无(一元) | macaddr | macaddr | 按位取反 | macaddr_not |
& | macaddr | macaddr | macaddr | 按位与 | macaddr_and |
| | macaddr | macaddr | macaddr | 按位或 | macaddr_or |
操作符类 5
声明输入类型与此类型相符的操作符类。多态操作符类、类型转换和表达式索引还可能提供其他索引路径;不能仅凭此表判断是否支持索引。
| 操作符类 | 索引方法 | 输入类型 | 操作符族 | 默认 | 存储类型 |
|---|---|---|---|---|---|
macaddr_ops | btree | macaddr | btree/macaddr_ops | 是 | 与输入类型相同 |
macaddr_ops | hash | macaddr | hash/macaddr_ops | 是 | 与输入类型相同 |
macaddr_minmax_ops | brin | macaddr | brin/macaddr_minmax_ops | 是 | macaddr |
macaddr_minmax_multi_ops | brin | macaddr | brin/macaddr_minmax_multi_ops | 否 | macaddr |
macaddr_bloom_ops | brin | macaddr | brin/macaddr_bloom_ops | 否 | macaddr |
版本比较
PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。
这两个样本的系统目录和结构化属性没有变化。
这些构建的文档也有差异,请查看对应版本的手册定义。
文档与源码
- 构建
- 18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
相关条目
全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。