防止PostgreSQL的CIDR列上的值重叠

时间:2019-03-21 15:19:51

标签: postgresql exclusion-constraint

是否存在约束或其他PostgreSQL功能来防止CIDR列的值重叠?

例如:

192.168.1.0/24192.168.1.1/32

因为192.168.1.1/32包含在192.168.1.0/24子网中,所以它们不能同时存在。

1 个答案:

答案 0 :(得分:0)

是的,使用排除约束很容易做到。

CREATE TABLE networks (
   id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
   net cidr NOT NULL
);

ALTER TABLE networks ADD EXCLUDE USING gist (net inet_ops WITH &&);

INSERT INTO networks (net) VALUES ('192.168.1.0/24');
INSERT 0 1

INSERT INTO networks (net) VALUES ('192.168.1.1/32');
ERROR:  conflicting key value violates exclusion constraint "networks_net_excl"
DETAIL:  Key (net)=(192.168.1.1) conflicts with existing key (net)=(192.168.1.0/24).