On Fri, 21 Apr 2006, Alban Hertroys wrote: > Teodor Sigaev wrote: > >> Maybe something along the lines of the following is possible?: > > > > Exact, it's for what ltree was developed. > > Cool, looks like it is what I need then. > > > contrib_regression=# select 'a.b.c' <@ 'a.b'::ltree; > > ?column? > > ---------- > > t > > (1 row) > > How would you use this to constrain a foreign key? > > We've been experimenting with a table containing a branch 'a', 'a.b' and > 'a.b.c', but deleting 'a.b' didn't cause a constraint violation. > > SQL> CREATE TABLE ltree_test (path ltree PRIMARY KEY REFERENCES > ltree_test(path)); > NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index > "ltree_test_pkey" for table "ltree_test" > CREATE TABLE > SQL> INSERT INTO ltree_test VALUES ('a'::ltree); > INSERT 84117368 1 > SQL> INSERT INTO ltree_test VALUES ('a.b'::ltree); > INSERT 84117369 1 > SQL> INSERT INTO ltree_test VALUES ('a.b.c'::ltree); > INSERT 84117370 1 > SQL> DELETE FROM ltree_test WHERE path = 'a.b'::ltree; > DELETE 1 I'm not sure why you expect this to error. Any row that would reference a.b would be removed by the delete AFAICS.