• Home
  • About
    • lahuman photo

      lahuman

      열심히 사는 아저씨

    • Learn More
    • Facebook
    • LinkedIn
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Postgresql] INT4 convert IP 처리

23 Aug 2018

Reading time ~1 minute

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

참고 사이트

  • compile postgresql online
  • Network Address Types


postgresqlip Share Tweet +1