inet
扩展定义了 INET
数据类型,用于存储 IPv4 和 IPv6 互联网地址。它支持用于子网掩码的 CIDR 表示法(例如,198.51.100.0/22
,2001:db8:3c4d::/48
)。
Installing and Loading
inet
扩展将在首次使用时从官方扩展仓库中透明地 自动加载。
如果您希望手动安装并加载它,请运行:
INSTALL inet;
LOAD inet;
Examples
SELECT '127.0.0.1'::INET AS ipv4, '2001:db8:3c4d::/48'::INET AS ipv6;
IPv4 | IPv6 |
---|---|
127.0.0.1 | 2001:db8:3c4d::/48 |
CREATE TABLE tbl (id INTEGER, ip INET);
INSERT INTO tbl VALUES
(1, '192.168.0.0/16'),
(2, '127.0.0.1'),
(3, '8.8.8.8'),
(4, 'fe80::/10'),
(5, '2001:db8:3c4d:15::1a2f:1a2b');
SELECT * FROM tbl;
id | ip |
---|---|
1 | 192.168.0.0/16 |
2 | 127.0.0.1 |
3 | 8.8.8.8 |
4 | fe80::/10 |
5 | 2001:db8:3c4d:15::1a2f:1a2b |
对INET
值的操作
INET
值可以自然比较,IPv4 会排在 IPv6 之前。此外,IP 地址可以通过加减整数来修改。
CREATE TABLE tbl (cidr INET);
INSERT INTO tbl VALUES
('127.0.0.1'::INET + 10),
('fe80::10'::INET - 9),
('127.0.0.1'),
('2001:db8:3c4d:15::1a2f:1a2b');
SELECT cidr FROM tbl ORDER BY cidr ASC;
cidr |
---|
127.0.0.1 |
127.0.0.11 |
2001:db8:3c4d:15::1a2f:1a2b |
fe80::7 |
host
函数
可以使用HOST()
函数提取INET
值的主机组件。
CREATE TABLE tbl (cidr INET);
INSERT INTO tbl VALUES
('192.168.0.0/16'),
('127.0.0.1'),
('2001:db8:3c4d:15::1a2f:1a2b/96');
SELECT cidr, host(cidr) FROM tbl;
cidr | 主机(cidr) |
---|---|
192.168.0.0/16 | 192.168.0.0 |
127.0.0.1 | 127.0.0.1 |
2001:db8:3c4d:15::1a2f:1a2b/96 | 2001:db8:3c4d:15::1a2f:1a2b |
HTML 转义和反转义函数
SELECT html_escape('&');
┌──────────────────┐
│ html_escape('&') │
│ varchar │
├──────────────────┤
│ & │
└──────────────────┘
SELECT html_unescape('&');
┌────────────────────────┐
│ html_unescape('&') │
│ varchar │
├────────────────────────┤
│ & │
└────────────────────────┘