Re: BUG #11734: The "<<=" operator on "inet" values does not return the expected result.
От | Tom Lane |
---|---|
Тема | Re: BUG #11734: The "<<=" operator on "inet" values does not return the expected result. |
Дата | |
Msg-id | 7717.1413914133@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | BUG #11734: The "<<=" operator on "inet" values does not return the expected result. (michel@albert.lu) |
Список | pgsql-bugs |
michel@albert.lu writes: > The best way to explain this is with a quick example script: > CREATE TABLE inettest ( > value inet UNIQUE > ); > INSERT INTO inettest VALUES > ('1.2.1.0/24'), > ('1.2.1.1/24'), > ('1.2.1.2/24'), > ('1.2.2.0/24'), > ('1.2.3.0/24'), > ('1.2.3.1/24'), > ('1.2.3.2/24'), > ('1.2.3.3/24'), > ('1.2.3.4/24') > ; > SELECT * FROM inettest WHERE value <<= '1.2.3.1/24'::inet; > I would expect that the above select would only return *one* row. The one > with the host '1.2.3.1/24'. Instead, it returns *all* rows of the > '1.2.3.0/24' network. The PG documentation is pretty clear on this point: The operators <<, <<=, >>, >>=, and && test for subnet inclusion. They consider only the network parts of the two addresses (ignoring any host part) and determine whether one network is identical to or a subnet of the other. [ first para in "Network Address Functions and Operators" ] So <<= should return true for any two of the addresses you cite here. Personally I'd use CIDR, not INET, for anything I was thinking of as a network ID rather than a single host's ID. regards, tom lane
В списке pgsql-bugs по дате отправления: