ip4r

PostgreSQL 的 IPv4/v6 和 IPv4/v6 范围索引类型

概览

扩展包名版本分类许可证语言
ip4r2.4.2TYPEPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
3820ip4r-
相关扩展pg_net prefix semver unit pgpdf pglite_fusion md5hash asn1oid
下游依赖geoip

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG2.4.21817161514ip4r-
RPMPGDG2.4.21817161514ip4r_$v-
DEBPGDG2.4.21817161514postgresql-$v-ip4r-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
PGDG 2.4.2
PGDG 2.4.2
PGDG 2.4.2
PGDG 2.4.2
PGDG 2.4.2
d13.x86_64
d13.aarch64
PGDG 2.4.2
PGDG 2.4.2
PGDG 2.4.2
PGDG 2.4.2
PGDG 2.4.2
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64

安装

您可以直接安装 ip4r 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:

pig repo add pgdg -u          # 添加 PGDG 仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install ip4r;          # 当前活跃 PG 版本安装
pig ext install -y ip4r -v 18  # PG 18
pig ext install -y ip4r -v 17  # PG 17
pig ext install -y ip4r -v 16  # PG 16
pig ext install -y ip4r -v 15  # PG 15
pig ext install -y ip4r -v 14  # PG 14
dnf install -y ip4r_18       # PG 18
dnf install -y ip4r_17       # PG 17
dnf install -y ip4r_16       # PG 16
dnf install -y ip4r_15       # PG 15
dnf install -y ip4r_14       # PG 14
apt install -y postgresql-18-ip4r   # PG 18
apt install -y postgresql-17-ip4r   # PG 17
apt install -y postgresql-16-ip4r   # PG 16
apt install -y postgresql-15-ip4r   # PG 15
apt install -y postgresql-14-ip4r   # PG 14

创建扩展

CREATE EXTENSION ip4r;

用法

ip4r: 支持 GiST 索引的 IPv4/IPv6 地址与范围类型

ip4r 扩展提供了专用的 IPv4/IPv6 地址和范围数据类型,具有优秀的包含查询索引支持。

CREATE EXTENSION ip4r;

数据类型

类型描述
ip4单个 IPv4 地址(32 位)
ip6单个 IPv6 地址(双 64 位)
ip4rIPv4 地址范围
ip6rIPv6 地址范围
ipaddress混合 IPv4/IPv6 地址
iprange混合 IPv4/IPv6 范围

地址输入

SELECT '192.168.1.1'::ip4;
SELECT '2001:db8::1'::ip6;
SELECT '10.0.0.0/24'::ip4r;                   -- CIDR 表示法
SELECT '192.168.1.100-192.168.1.200'::ip4r;   -- 显式范围

地址运算符

  • 比较=<><><=>=
  • 算术+-(与整数运算)
  • 位运算&(AND)、|(OR)、#(XOR)、~(NOT)

地址函数

SELECT family('192.168.1.1'::ipaddress);       -- 4
SELECT ip4_netmask(24);                         -- 255.255.255.0

范围运算符

运算符描述
>>=包含或等于
>>严格包含
<<=被包含或等于
<<严格被包含
&&重叠

范围函数

SELECT lower('10.0.0.0/24'::ip4r);           -- 10.0.0.0
SELECT upper('10.0.0.0/24'::ip4r);           -- 10.0.0.255
SELECT is_cidr('10.0.0.0/24'::ip4r);         -- true
SELECT cidr_split('10.0.0.0-10.0.0.5'::ip4r); -- 分解为 CIDR
SELECT @ '10.0.0.0/24'::ip4r;                 -- 近似大小

索引

-- 用于包含查询的 GiST 索引
CREATE INDEX idx ON ipranges USING gist (range);

-- 查找包含特定 IP 的范围
SELECT * FROM ipranges WHERE range >>= '10.0.1.15'::ip4;

-- 查找最精确匹配
SELECT * FROM ipranges
WHERE range >>= '10.0.1.15'::ip4
ORDER BY @ range LIMIT 1;

最后修改 2026-03-14: update extension metadata (953cbd0)