-- for ras, not tested
--
-- assumption:
-- table ip_alloc with field ip_addr
drop function trig_ip_overlap_iu() cascade;
create function trig_ip_overlap_iu() returns trigger as $$
declare r int4;
begin
select into r count(*)
from ip_alloc a
where a.ip_addr << new.ip_addr
or a.ip_addr >> new.ip_addr
or a.ip_addr = new.ip_addr;
if r>0 then
raise exception 'Block will overlap'
end if;
return new;
end;
$$ language 'plpgsql';
drop trigger trig_ip_overlap_aiu on ip_alloc;
create trigger trig_ip_overlap_aiu before insert or update on ip_alloc
for each row execute procedure trig_ip_overlay_iu();