Thread: functionality like Oracle's "connect by"
I know this question has been discussed, probably multiple times, but I can't seem to access archives.postgresql.org today.... I need to select all the rows in a table with two fields: parent_id and child_id that participate in the same logical "tree". In other words, given an id value, I want to find where child_id = my-value, and then retrieve the values in the tree above it. The functionality I'm looking for is essentially the Oracle "connect by". Does anything like this exist for postgresql? If not, does anybody have a clever solution? (My not-so-clever first pass involved recursing in my Java program, but the stack-space-abuse police are knocking on my door....) Again, apologies for asking something that's probably already been discussed ad nauseum on this list... - DAP ====================================================== David Parker Tazz Networks (401) 709-5130
"David Parker" <dparker@tazznetworks.com> writes: > The functionality I'm looking for is essentially the Oracle "connect > by". Does anything like this exist for postgresql? Yes. In the contrib directory of the source is a directory named "tablefunc". If you've installed from an distribution you might like for a postgresql-contrib package or something like that. It has a function that tries to do what you want: connectby(text relname, text keyid_fld, text parent_keyid_fld [, text orderby_fld], text start_with, int max_depth [, text branch_delim]) - returns keyid, parent_keyid, level, and an optional branch string and an optional serial column for ordering siblings - requires anonymous composite type syntax in the FROM clause. See the instructions in the documentation below. I've never tried it though. -- greg
David, I suggest our search on postgresql resources: http://www.pgsql.ru/db/pgsearch/index.html?q=%22connect+by%22+oracle Oleg On Mon, 30 Aug 2004, David Parker wrote: > I know this question has been discussed, probably multiple times, but I > can't seem to access archives.postgresql.org today.... > > I need to select all the rows in a table with two fields: parent_id and > child_id that participate in the same logical "tree". In other words, > given an id value, I want to find where child_id = my-value, and then > retrieve the values in the tree above it. > > The functionality I'm looking for is essentially the Oracle "connect > by". Does anything like this exist for postgresql? If not, does anybody > have a clever solution? (My not-so-clever first pass involved recursing > in my Java program, but the stack-space-abuse police are knocking on my > door....) > > Again, apologies for asking something that's probably already been > discussed ad nauseum on this list... > > - DAP > ====================================================== > David Parker Tazz Networks (401) 709-5130 > > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend > Regards, Oleg _____________________________________________________________ Oleg Bartunov, sci.researcher, hostmaster of AstroNet, Sternberg Astronomical Institute, Moscow University (Russia) Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(095)939-16-83, +007(095)939-23-83