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.
- 92 megtekintés
Hozzászólások
https://www.postgresql.org/docs/11/functions-net.html
Ebből látszik, hogy neked nem a <>, hanem a << operátor kell.
Vagy én nem értelek igazán. Tudod, hogy melyik subnetben vannak a kliensek? Miért kell az egész localip3 tábla?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni