INT4 형식으로 저장된 IP 값을 Function을 이용하여 처리 하기
IP를 postgresql에 저장을 할때 문자열로 저장을 하기도 하지만, Network Address Types으로 제공도 된다.
Name | Storage Size | Description |
---|---|---|
cidr | 7 or 19 bytes | IPv4 and IPv6 networks |
inet | 7 or 19 bytes | IPv4 and IPv6 hosts and networks |
macaddr | 6 bytes | MAC addresses |
또한 다른 방식으로는 int8로 저장이 되기도 한다.
문제는 int4 형식으로 저장되었을 경우이다.
이 경우에는 음수값에 대하여 IP 형식으로 표출하기 위해서는 int4보다 큰 양수 형식으로 변환하여 표시 해야 한다.
간단하게 function을 이용하여 만들어 보았다.
create or replace function int2ip(intVal integer)
returns TABLE(
ipVal text
)
as $$
begin
if intVal < 0 then
return QUERY SELECT ('0.0.0.0'::inet + ((2147483649+intVal)::bigint+2147483647::bigint))::text;
-- return QUERY SELECT '0.0.0.0'::inet + ( 'x' || to_hex(intVal))::bit(32)::bigint
else
return QUERY SELECT ('0.0.0.0'::inet + intVal)::text;
end if;
end; $$
language 'plpgsql';
-- 211.115.106.210
select int2ip(-747410734);
결과
int2ip |
---|
211.115.106.210/32 |
postgresql을 설치 하지 않고도 온라인에서 간단하게 테스트 하는 사이트를 이용하였다..