functionality like Oracle's "connect by"

Started by David Parkerover 21 years ago3 messagesgeneral
Jump to latest
#1David Parker
dparker@tazznetworks.com

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

#2Bruce Momjian
bruce@momjian.us
In reply to: David Parker (#1)
Re: functionality like Oracle's "connect by"

"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

#3Oleg Bartunov
oleg@sai.msu.su
In reply to: David Parker (#1)
Re: functionality like Oracle's "connect by"

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