Chris LaRose

PostgreSQL: Convert numeric IP address field to INET field

Recall that an IPv4 address can be represented as a 32-bit integer. In many RDBMSs, this means that a 10-digit numeric field is sufficient. In this case, your application would have to handle the conversion from integer to strings like “127.0.0.1” and back again for INSERT and UPDATE operations. But if you’re using PostgreSQL, you can use the inet field and have the string conversion handled automagically and your heart can rest easy knowing that the address is stored efficiently.

In my case, after a migration from MySQL, I ended up with a numeric(10) field and I wanted to convert it to a inet field. Here’s how I did it:

ALTER TABLE my_table ALTER COLUMN ip_address TYPE inet
USING '0.0.0.0'::inet + ip_address::bigint;

There is no conversion defined from numeric to inet, so ip_address::inet would fail. So here we take advantage of addition being defined for inet and bigint operands to accomplish the conversion.

blog comments powered by Disqus