Tom Lane <t...@sss.pgh.pa.us> wrote: > Wayne Cuddy <lists-pg...@useunix.net> writes: > A less bogus way of doing things is to use an EXCLUDE constraint, > although that will restrict you to be running PG 9.0 or newer. You > also need some way of representing the ranges as indexable objects. > In 9.0 or 9.1, probably the best way is to use contrib/seg/ to > represent the ranges as line segments. 9.2 will have a cleaner > solution, ie range types.
Simple example for 9.2: test=# create table foo (name text, id_range int4range, exclude using gist(name with =, id_range with &&)); NOTICE: CREATE TABLE / EXCLUDE will create implicit index "foo_name_id_range_excl" for table "foo" CREATE TABLE Time: 40,273 ms test=*# insert into foo values ('name1', '[1,9)'); INSERT 0 1 Time: 0,660 ms test=*# insert into foo values ('name1', '[10,19)'); INSERT 0 1 Time: 0,313 ms test=*# insert into foo values ('name1', '[5,15)'); ERROR: conflicting key value violates exclusion constraint "foo_name_id_range_excl" DETAIL: Key (name, id_range)=(name1, [5,15)) conflicts with existing key (name, id_range)=(name1, [1,9)). test=!# Great feature! Thx to all developers behing PG! Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknown) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889° -- Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-sql