From: | Harald Fuchs <hari(dot)fuchs(at)gmail(dot)com> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: exclusion constraint for ranges of IP |
Date: | 2011-08-22 15:20:30 |
Message-ID: | 86hb595v7l.fsf@mgm.protecting.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
In article <1343D11C-6F58-4653-8EA8-837C01E6184F(at)unicell(dot)co(dot)il>,
Herouth Maoz <herouth(at)unicell(dot)co(dot)il> writes:
> On 22/08/2011, at 01:19, Harald Fuchs wrote:
>> In article <CAF36091-203E-4C10-AA53-7D9087114D35(at)unicell(dot)co(dot)il>,
>> Herouth Maoz <herouth(at)unicell(dot)co(dot)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, it is 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 way to 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).
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Stehule | 2011-08-22 16:05:02 | Re: Confused about writing this stored procedure/method. |
Previous Message | JavaNoobie | 2011-08-22 14:38:22 | Confused about writing this stored procedure/method. |