请举例说明 PostgreSQL 中 cidr 和 inet 数据类型的差异

Eug*_*kov 11 postgresql

来自美国商务部

inet 和 cidr 数据类型之间的本质区别在于 inet 接受网络掩码右侧带有非零位的值,而 cidr 则不接受。

请举例说明 PostgreSQL 中 cidr 和 inet 数据类型的差异。

我不完全理解这一点,想从视觉上看到差异。

Eug*_*kov 9

看来我找到了答案

假设您有 /8 网络掩码,则该cidr类型要求最右边的所有 24 位均为零。inet没有这个要求。

db=# select '255.0.0.0/8'::cidr;
255.0.0.0/8

db=# select '255.1.0.0/8'::cidr;
ERROR:  invalid cidr value: "255.1.0.0/8"
DETAIL:  Value has bits set to right of mask.
Run Code Online (Sandbox Code Playgroud)

inet 允许这样做:

db=# select '255.1.0.0/8'::inet;
255.1.0.0/8
Run Code Online (Sandbox Code Playgroud)