防止PostgreSQL中CIDR列上的重叠值



是否存在约束或其他一些postgresql功能,以防止CIDR列具有重叠的值?

例如:

192.168.1.0/24192.168.1.1/32

这些不存在,因为192.168.1.1/32包含在192.168.1.0/24子网中。

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

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).

每当您尝试插入两个行时,排除约束将导致错误(net重叠的值(&&是"重叠"操作员")。

最新更新