Postgres extension to define ranges of IP addresses
Shell C PLpgSQL Makefile
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.gitignore
LICENSE
Makefile
README.md
inetrange--1.0.sql
inetrange.c
inetrange.control
inetrange_canonical.c

README.md

inetrange

This is a Postgres extension to give you ranges of inet values. I wrote a tutorial-style blog post about using the Postgres inet type in ranges that explains how you might build this extension "by hand", but since a small part of it requires C, it seems nicer to have it all packaged as an extension for people.

Installing

This package installs like any Postgres extension. First say:

make && sudo make install

You will need to have pg_config in your path, but normally that is already the case. You can check with which pg_config.

Then in the database of your choice say:

CREATE EXTENSION inetrange;

Usage

Once you've installed the extension, you can do things like this:

SELECT '1.0.1.1' <@ inetrange('1.0.0.0', '1.1.0.0', '[]');

or this:

SELECT '[1.0.0.0,1.1.0.0]'::inetrange && '[1.0.1.0,2.2.2.2]'::inetrange;

You can also create exclusion constraints on inetrange columns:

CREATE TABLE geoips (
  ips inetrange NOT NULL,
  country_code TEXT NOT NULL,
  latitude REAL NOT NULL,
  longitude REAL NOT NULL,
  CONSTRAINT geoips_dont_overlap
    EXCLUDE USING gist (ips WITH &&)
);

Because the exclusion constraint auto-generates a GiST index, you will also get fast lookups with operators like <@.