Sorry for being kind of late to the party (I was in 2015.PgConf.EU !!), and not having read most of the replies, what we have been successfully doing for this problem for our app is do it this way : parents int[] -- where parents stores the path from the node to the root of the tree and then have those indexes : btree (first(parents)) btree (level(parents)) -- length btree (last(parents)) gin (parents gin__int_ops) -- the most important
This has been described as "genealogical tree" approach, and works very good, IMHO much better than nested sets.
Is there a more complete description of this approach available? By the title one might assume could be applied to populations as opposed to phylogeny (the OP's use case). Does it deal with consanguinity? Does it perform well going "up" the tree (which is of course branched at every level)?
--
David Blomstrom Writer & Web Designer (Mac, M$ & Linux) www.geobop.org