I think I've found a bug either in PostgreSQL 9.1.0 or in the ip4r
package (version 1.05). Since the problematic behavior occurs on
different tables and on different servers, it should be relatively easy
to reproduce:
CREATE TABLE foo (
id serial NOT NULL,
range ip4r NOT NULL,
PRIMARY KEY (id)
);
Now populate this table with >2M rows where the range values don't
overlap. Ensure this by doing
ALTER TABLE foo
ADD CONSTRAINT foo_range_ix
EXCLUDE USING gist (range WITH &&);
After a while PostgreSQL will begin to eat all your main memory and then crash.