Re: int to inet conversion

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: int to inet conversion
Дата
Msg-id 4717.1133667183@sss.pgh.pa.us
обсуждение исходный текст
Ответ на int to inet conversion  (Anton Nikiforov <anton@nikiforov.ru>)
Ответы Re: int to inet conversion  (Anton Nikiforov <anton@nikiforov.ru>)
Re: int to inet conversion  (Anton Nikiforov <anton@nikiforov.ru>)
Список pgsql-general
Anton Nikiforov <anton@nikiforov.ru> writes:
> is there any function that can translate INT to INET type?

Nothing built-in, and given the fact that "inet" no longer means "IPv4",
it's unlikely we'd add one in the future.  But there's nothing stopping
you from adding one of your own.  For example

regression=# create or replace function int2inet(int) returns inet as $$
regression$# declare oct1 int;
regression$#   oct2 int;
regression$#   oct3 int;
regression$#   oct4 int;
regression$# begin
regression$#   oct1 := ((($1 >> 24) % 256) + 256) % 256;
regression$#   oct2 := ((($1 >> 16) % 256) + 256) % 256;
regression$#   oct3 := ((($1 >>  8) % 256) + 256) % 256;
regression$#   oct4 := ((($1      ) % 256) + 256) % 256;
regression$#   return oct1 || '.' || oct2 || '.' || oct3 || '.' || oct4;
regression$# end$$ language plpgsql strict immutable;
CREATE FUNCTION
regression=# select int2inet(-1062726656);
   int2inet
--------------
 192.168.20.0
(1 row)

There's probably a better way to do the shifting-and-masking, but that
was the first thing that came to mind.  (Actually, if you are planning
to push a whole lot of data through this, it might be worth your time
to write something in C.  But for a one-shot data conversion task this
is probably plenty good enough.)

            regards, tom lane

В списке pgsql-general по дате отправления:

Предыдущее
От: Anton Nikiforov
Дата:
Сообщение: int to inet conversion
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: Missing variable "role" in "pg_settings"?