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을 설치 하지 않고도 온라인에서 간단하게 테스트 하는 사이트를 이용하였다..