I'd like to confirm I'm doing this in an acceptable manner as running
through the dependency tree is kinda heavy -- then again how often do
you drop something?

Source patch (against 7.2 release) can be found at:
http://www.zort.ca/~rbt/patches/postgresql_dependencies/depend.patch

Tracking table pg_depend is similar to pg_description in regards to
applying an address to an object.  It's quite simple to create and
delete dependencies between objects.


The bad part is that the depend...() functions rely on the name of
their 'class' (pg_class.relname) to align with those recorded in
catname.h.  In order to figure out what the object is and how to deal
with it, the code is required to run through a large number of if /
elseif statements.  Then the specific removal function is called; like
removeType().  I'd much prefer to use a switch statement which doesn't
appear to work with strings, so I'm looking for suggestions.
Otherwise those if / else combinations will have as many entries as
there are system tables -- well, a couple less.

A completed example on types is a part of the patch, simple output
below.  System structures do not have entries in pg_depend yet, but
those will be done before submission of the patch.

template1=# create database d;
CREATE DATABASE
template1=# \c d
You are now connected to database d.
d=# select * from pg_depend;
 classid | objid | objsubid | depclassid | depobjid | depobjsubid
---------+-------+----------+------------+----------+-------------
(0 rows)
d=# create type typ1 (input = int2in,output = int2out);
CREATE
d=# select * from pg_depend;
 classid | objid | objsubid | depclassid | depobjid | depobjsubid
---------+-------+----------+------------+----------+-------------
    1247 | 41155 |        0 |       1255 |       38 |           0
    1247 | 41155 |        0 |       1255 |       39 |           0
    1247 | 41155 |        0 |       1255 |       38 |           0
    1247 | 41155 |        0 |       1255 |       39 |           0
    1247 | 41156 |        0 |       1255 |      750 |           0
    1247 | 41156 |        0 |       1255 |      751 |           0
    1247 | 41156 |        0 |       1255 |      750 |           0
    1247 | 41156 |        0 |       1255 |      751 |           0
(8 rows)

d=# drop type typ1;
DROP
d=# select * from pg_depend;
 classid | objid | objsubid | depclassid | depobjid | depobjsubid
---------+-------+----------+------------+----------+-------------
(0 rows)


--
Rod Taylor

Your eyes are weary from staring at the CRT. You feel sleepy. Notice
how restful it is to watch the cursor blink. Close your eyes. The
opinions stated above are yours. You cannot imagine why you ever felt
otherwise.



Wed, 6 Mar 2002 23:24:09 -0500
"Rod Taylor" <rbt@zort.ca>
Dependencies