Re: IP address, subnet query behaves wrong for /32

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: "Richard RK(dot) Klingler" <richard(at)klingler(dot)net>
Cc: "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org>
Subject: Re: IP address, subnet query behaves wrong for /32
Date: 2015-08-06 17:01:27
Message-ID: CAKFQuwZWonEKVn6FAE_UAh4UiJ6fE0pQWcZn21gvhZg5UR2fzQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Thu, Aug 6, 2015 at 9:47 AM, Richard RK. Klingler <richard(at)klingler(dot)net>
wrote:

> Evenin'
>
> What I discovered just lately is a nice feature from pgsql that I can test
> if a specific IP address falls within a supplied subnet:
>
> myserver=# select inet '192.168.0.1' << '192.168.0.0/24'::inet as ip;
>
> ip
>
> ----
>
> t
>
> (1 row)
>
>
> But what I don't understand is why pgsql doesn't behave correctly when
> testing for a /32 subnet:
> (it works for /31 correctly though)
>
> myserver=# select inet '192.168.0.1' << '192.168.0.1/32'::inet as ip;
>
> ip
>
> ----
>
> f
>
> From a network engineering point of view this should also return "true"
> and not false.
>
>
​select inet '192.168.0.1' <<= '192.168.0.1/32'::inet as ip;
ip
---
t

​My best explanation is that since there is no network part on a /32
address there is no concept of "contained within the network" to match
against. The added equality check allows for that condition to be matched.

David J.​

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Adrian Klaver 2015-08-06 17:02:24 Re: IP address, subnet query behaves wrong for /32
Previous Message Richard RK. Klingler 2015-08-06 16:47:49 IP address, subnet query behaves wrong for /32