postgresql 11 inet típusú oszlop lekérdezés cidr típussal - gyakoló feladat

Sziasztok!

Az alábbi lekérdezést szeretném átírni úgy hogy nem szeretnék meghívni másik táblát.

Ezzel a lekérdezésell le szeretném szűrni azokat a forgalmakat amik belülről indultak és kifelé tartanak.

inet típus:
server_address, client_address, localip3

Az index típus a server_address, client_address, localip3 gist net_ops

a localip3-ban vannak felvéve a helyi ip címek amit le szeretnék cserélni. (10.0.0.0/16 --> /32- szereltekben netmask nélkül, 10.0.0.1, 10.0.0.2, 10.0.0.3...10.254.254.254)

   localip3: (inet)
  10.0.0.1
  10.0.0.2
  10.0.0.3

 

SELECT
  log.server_zone,
  count(log.server_zone)
FROM log
WHERE
 date > now() -interval '1 hour'
 AND  log.client_address IN (SELECT iprange FROM localip3 )
 AND  log.server_address NOT IN (SELECT iprange FROM localip3 )
GROUP BY log.server_zone

Itt szépen lefut s a várt eredményt adja
SELECT
  log.server_zone,
  count(log.server_zone)
FROM log
WHERE
 date > now() -interval '1 hour'
AND  log.client_address IN (SELECT iprange FROM localip3 )
AND  log.server_address <> inet '10.0.0.0/16'
  GROUP BY log.server_zone;

de ezt a sort nem tudom átalakítani : AND  log.client_address IN (SELECT iprange FROM localip3 ), hogy megkapjam a fenti eredményt

SELECT
  log.server_zone,
  count(log.server_zone)
FROM log
WHERE
 date > now() -interval '1 hour'
 AND  inet '10.0.0.0/16' >>= log.client_address  
 AND  log.server_address <> inet '10.0.0.0/16'
GROUP BY log.server_zone;

https://www.postgresql.org/docs/11/functions-net.html
>>    contains    inet '192.168.1/24' >> inet '192.168.1.5'
>>=    contains or equals    inet '192.168.1/24' >>= inet '192.168.1/24'

köszönöm a segítséget.
(nem nem vagyok adatbázisban otthon, csak saját magamat fejleszteném, tanulnék)

 

update:

server_addres: (inet)       client_address: (inet)
   10.0.0.1                             24.25.36.88
   10.0.0.2                              10.0.0.8
  89.64.88.77                        10.0.0.1
  101.25.4.2                           10.0.0.9

A client_address-ben csa a privát IP szerepejen, minden mást hagyjon figyelmen kívűl, a server_address-ben csak a publik ipt rakja bele.

Hozzászólások

Szerkesztve: 2021. 03. 25., cs – 00:20

pont az afeltét jól működik. szerver_addressbe ne szerepeljen belső IP

csak a cliens IP-be.

A localip3 táblát szeretném lecserélni, hogy gyorsabban fusson le ez a query