Re: Implementing pg_dump_sort.c topological sorting in sql/plpgsql/plperl?

From: Dimitri Fontaine <dimitri(at)2ndQuadrant(dot)fr>
To: Joel Jacobson <joel(at)gluefinance(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Implementing pg_dump_sort.c topological sorting in sql/plpgsql/plperl?
Date: 2011-01-04 16:51:16
Message-ID: 87mxngfw8r.fsf@hi-media-techno.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Joel Jacobson <joel(at)gluefinance(dot)com> writes:
> It's not possible to use a plain recursive query to do the trick (due
> to 'i' bidirectional dependencies and dependency loops).

Well I came up with that while working on some extension related fun
dependency problems, I guess it could help you:

~:5490=# WITH RECURSIVE depends AS (
select 16385 as nsp, objid, refobjid, array[refobjid] as deps
from pg_depend
where refobjid = 16854 and deptype != 'p'
UNION ALL
select p.nsp, p.objid, d.refobjid, deps || d.refobjid
from pg_depend d JOIN depends p ON d.objid = p.objid
where d.deptype != 'p' and not d.refobjid = any(deps)
)
select * from depends;
nsp | objid | refobjid | deps
-------+-------+----------+--------------------
16385 | 16851 | 16854 | {16854}
16385 | 16852 | 16854 | {16854}
16385 | 16853 | 16854 | {16854}
16385 | 16851 | 2200 | {16854,2200}
16385 | 16852 | 2200 | {16854,2200}
16385 | 16852 | 16851 | {16854,16851}
16385 | 16853 | 2200 | {16854,2200}
16385 | 16852 | 2200 | {16854,16851,2200}
16385 | 16852 | 16851 | {16854,2200,16851}
(9 rows)

Regards,
--
Dimitri Fontaine
http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message David Fetter 2011-01-04 16:53:40 Re: Implementing pg_dump_sort.c topological sorting in sql/plpgsql/plperl?
Previous Message Tom Lane 2011-01-04 16:30:43 Re: WIP: Range Types