pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL 提供存储 IPv4、IPv6 和 MAC 地址的数据类型,如 表 8.17 所示。 最好使用这些类型而不是普通文本类型,因为这些类型提供输入错误检查和若干专用的运算符与函数。
表 8.17. 网络地址类型
| 名字 | 存储尺寸 | 描述 |
|---|---|---|
cidr |
12或24字节 | IPv4 或 IPv6 网络 |
inet |
12或24字节 | IPv4和IPv6主机以及网络 |
macaddr |
6字节 | MAC地址 |
在对 inet 或 cidr 数据类型排序时,IPv4 地址总是排在 IPv6 地址之前,即使后者是封装或映射 IPv4 地址所得的 IPv6 地址,例如 ::10.2.3.4 或 ::ffff:10.4.3.2。
inet #inet 类型在单个字段中保存一个 IPv4 或 IPv6 主机地址,以及可选的其所在子网的标识。 子网标识通过说明主机地址中有多少位表示网络地址(即“网络掩码”)来表达。如果网络掩码是 32 且地址是 IPv4,该值就不表示子网而只表示单个主机。在 IPv6 中,地址长 128 位,因此 128 位将指定唯一的主机地址。注意,如果你只想接受网络,应使用 cidr 类型而不是 inet。
此类型的输入格式是 address/y,其中 address 是一个 IPv4 或 IPv6 地址, y 是网络掩码的位数。如果省略了 /y 部分,则 IPv4 的网络掩码为 32、IPv6 的为 128,该值只表示单个主机。显示时,如果网络掩码指定的是单个主机,则会省略 /y 部分。
cidr #cidr 类型保存 IPv4 或 IPv6 网络说明。输入和输出格式 遵循无类别域间路由(CIDR)约定。指定网络的格式为 address/y,其中 address 是网络的 IPv4 或 IPv6 表示,而 y 是网络掩码中的位数。 如果省略 y,则会按照旧式 的分类网络编号系统假设来计算,但至少会大到足以覆盖输入中写出的 所有八位组。若指定的网络地址在所给网络掩码右侧仍有置位比特,则会 报错。
表 8.18展示了一些示例。
表 8.18. 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 |
| ::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 vs. cidr #inet 和 cidr 两种数据类型的本质区别在于: inet 接受网络掩码右侧仍含有非零位的值,而 cidr 不接受。
如果你不喜欢 inet 或 cidr 值的输出 格式,可以试试 host、text 和 abbrev 函数。
macaddr #macaddr 类型存储 MAC 地址,即以太网卡硬件地址(尽管 MAC 地址也用于其他目的)。输入接受多种惯用格式,包括
'08002b:010203' |
'08002b-010203' |
'0800.2b01.0203' |
'08-00-2b-01-02-03' |
'08:00:2b:01:02:03' |
它们都表示同一个地址。数字 a 到 f 大小写均可接受。输出总是采用所示形式中的最后一种。
PostgreSQL 源码分发中的 contrib/mac 目录包含一些工具, 可以用来把 MAC 地址映射为硬件制造商名称。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。