A postgresql inet to ip6.arpa snippet

Martin Millnert martin at millnert.se
Tue Jul 26 02:10:47 CEST 2011


128-bit friends,

I just took the time to come up with a IMHO quite clean way to create
ip6.arpa strings from inet types in PostgreSQL and thought I'd share (if
nothing else so for the Internet archives, where I came up empty with a
similar solution previously):

Prerequisites: a string reverse() function. Either, wait for/install 9.2
where it seems to be included, or simply install for example this one:
http://archives.postgresql.org/pgsql-sql/2005-02/msg00334.php

Then:
sysdb=# SELECT
reverse(regexp_replace(substring(encode(inet_send('2a02:9a0:100:2::101'::inet), 'hex') from 9), '(.)', E'.\\1', 'g'));
                             reverse                              
------------------------------------------------------------------
 1.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.0.0.1.0.0.a.9.0.2.0.a.2.
(1 row)

It may not look as much, but for me the dark magic was the inet_send
function to access the raw data of the inet type. I'm using this myself
now to generate part of a zone file anyway.

Cheers,
Martin

(If you're not using pgsql already, "you're doing it wrong" ;-) )



More information about the ipv6-ops mailing list