Re: exclusion constraint for ranges of IP

Поиск
Список
Период
Сортировка
От Harald Fuchs
Тема Re: exclusion constraint for ranges of IP
Дата
Msg-id 86hb595v7l.fsf@mgm.protecting.net
обсуждение исходный текст
Ответ на exclusion constraint for ranges of IP  (Herouth Maoz <herouth@unicell.co.il>)
Список pgsql-sql
In article <1343D11C-6F58-4653-8EA8-837C01E6184F@unicell.co.il>,
Herouth Maoz <herouth@unicell.co.il> writes:

> On 22/08/2011, at 01:19, Harald Fuchs wrote:

>> In article <CAF36091-203E-4C10-AA53-7D9087114D35@unicell.co.il>,
>> Herouth Maoz <herouth@unicell.co.il> writes:
>> 
>>> Hi,
>>> I'm designing a new database. One of the table contains allowed IP ranges for a customer (Fields: customer_id,
from_ip,to_ip) which is intended to check - if  an incoming connection's originating IP number falls within the range,
itis identified as a particular customer.
 
>> 
>>> Naturally, I'd like to have constraints on the table that prevent entering of ip ranges that overlap. Is there a
wayto do that with exclusion constraints? Or do I have to define a new type for this?
 
>> 
>> This "new type" already exists: ip4r, which can be found in pgfoundry.
>> With it you can do
>> 
>> CREATE TABLE mytbl (
>> iprange ip4r NOT NULL,
>> ...,
>> CONSTRAINT range_check CHECK ((NOT overlap(iprange)))
>> );


> Thank you.

> I assume you can't use a CHECK constraint for between-rows constraints. Wouldn't this  be

> CONSTRAINT EXCLUDE ( iprange WITH && )

> ?

You're right.  In the old PostgreSQL version I had to use I defined a
helper function
 CREATE FUNCTION overlap(ip4r) RETURNS boolean     LANGUAGE sql     AS $_$   SELECT count(*) > 0   FROM mytbl   WHERE
iprange!= $1 AND iprange && $1 $_$;
 

for the CHECK CONSTRAINT, but in more recent PostgreSQL versions you can
just say EXCLUDE (iprange WITH &&)
(without CONSTRAINT).



В списке pgsql-sql по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: sorting months according to fiscal year
Следующее
От: JavaNoobie
Дата:
Сообщение: Confused about writing this stored procedure/method.