diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile
index 6b018fdd5edf75ecd617f3c622e19afe4f0969eb..57c6e1f1ef55e1347c310e383633f838ea5b6b23 100644
--- a/contrib/btree_gist/Makefile
+++ b/contrib/btree_gist/Makefile
@@ -7,6 +7,7 @@ OBJS        = btree_gist.o btree_utils_num.o btree_utils_var.o btree_int2.o btre
               btree_bytea.o btree_bit.o btree_numeric.o
 
 DATA_built  = btree_gist.sql
+DATA        = uninstall_btree_gist.sql
 DOCS        = README.btree_gist
 
 REGRESS     = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz time timetz \
diff --git a/contrib/btree_gist/uninstall_btree_gist.sql b/contrib/btree_gist/uninstall_btree_gist.sql
new file mode 100644
index 0000000000000000000000000000000000000000..87c501151e9170e8859ef6ae0e517e101ca1835f
--- /dev/null
+++ b/contrib/btree_gist/uninstall_btree_gist.sql
@@ -0,0 +1,301 @@
+SET search_path = public;
+
+DROP OPERATOR CLASS gist_cidr_ops;
+
+DROP OPERATOR CLASS gist_inet_ops;
+
+DROP FUNCTION gbt_inet_same(internal, internal, internal);
+
+DROP FUNCTION gbt_inet_union(bytea, internal);
+
+DROP FUNCTION gbt_inet_picksplit(internal, internal);
+
+DROP FUNCTION gbt_inet_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_cidr_compress(internal);
+
+DROP FUNCTION gbt_inet_compress(internal);
+
+DROP FUNCTION gbt_cidr_consistent(internal,cidr,int2);
+
+DROP FUNCTION gbt_inet_consistent(internal,inet,int2);
+
+DROP OPERATOR CLASS gist_vbit_ops;
+
+DROP OPERATOR CLASS gist_bit_ops;
+
+DROP FUNCTION gbt_bit_same(internal, internal, internal);
+
+DROP FUNCTION gbt_bit_union(bytea, internal);
+
+DROP FUNCTION gbt_bit_picksplit(internal, internal);
+
+DROP FUNCTION gbt_bit_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_bit_compress(internal);
+
+DROP FUNCTION gbt_bit_consistent(internal,bit,int2);
+
+DROP OPERATOR CLASS gist_numeric_ops;
+
+DROP FUNCTION gbt_numeric_same(internal, internal, internal);
+
+DROP FUNCTION gbt_numeric_union(bytea, internal);
+
+DROP FUNCTION gbt_numeric_picksplit(internal, internal);
+
+DROP FUNCTION gbt_numeric_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_numeric_compress(internal);
+
+DROP FUNCTION gbt_numeric_consistent(internal,numeric,int2);
+
+DROP OPERATOR CLASS gist_bytea_ops;
+
+DROP FUNCTION gbt_bytea_same(internal, internal, internal);
+
+DROP FUNCTION gbt_bytea_union(bytea, internal);
+
+DROP FUNCTION gbt_bytea_picksplit(internal, internal);
+
+DROP FUNCTION gbt_bytea_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_bytea_compress(internal);
+
+DROP FUNCTION gbt_bytea_consistent(internal,bytea,int2);
+
+DROP OPERATOR CLASS gist_bpchar_ops;
+
+DROP OPERATOR CLASS gist_text_ops;
+
+DROP FUNCTION gbt_text_same(internal, internal, internal);
+
+DROP FUNCTION gbt_text_union(bytea, internal);
+
+DROP FUNCTION gbt_text_picksplit(internal, internal);
+
+DROP FUNCTION gbt_text_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_bpchar_compress(internal);
+
+DROP FUNCTION gbt_text_compress(internal);
+
+DROP FUNCTION gbt_bpchar_consistent(internal,bpchar,int2);
+
+DROP FUNCTION gbt_text_consistent(internal,text,int2);
+
+DROP OPERATOR CLASS gist_macaddr_ops;
+
+DROP FUNCTION gbt_macad_same(internal, internal, internal);
+
+DROP FUNCTION gbt_macad_union(bytea, internal);
+
+DROP FUNCTION gbt_macad_picksplit(internal, internal);
+
+DROP FUNCTION gbt_macad_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_macad_compress(internal);
+
+DROP FUNCTION gbt_macad_consistent(internal,macaddr,int2);
+
+DROP OPERATOR CLASS gist_cash_ops;
+
+DROP FUNCTION gbt_cash_same(internal, internal, internal);
+
+DROP FUNCTION gbt_cash_union(bytea, internal);
+
+DROP FUNCTION gbt_cash_picksplit(internal, internal);
+
+DROP FUNCTION gbt_cash_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_cash_compress(internal);
+
+DROP FUNCTION gbt_cash_consistent(internal,money,int2);
+
+DROP OPERATOR CLASS gist_interval_ops;
+
+DROP FUNCTION gbt_intv_same(internal, internal, internal);
+
+DROP FUNCTION gbt_intv_union(bytea, internal);
+      
+DROP FUNCTION gbt_intv_picksplit(internal, internal);
+   
+DROP FUNCTION gbt_intv_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_intv_decompress(internal);
+
+DROP FUNCTION gbt_intv_compress(internal);
+
+DROP FUNCTION gbt_intv_consistent(internal,interval,int2);
+
+DROP OPERATOR CLASS gist_date_ops;
+
+DROP FUNCTION gbt_date_same(internal, internal, internal);
+
+DROP FUNCTION gbt_date_union(bytea, internal);
+      
+DROP FUNCTION gbt_date_picksplit(internal, internal);
+   
+DROP FUNCTION gbt_date_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_date_compress(internal);
+
+DROP FUNCTION gbt_date_consistent(internal,date,int2);
+
+DROP OPERATOR CLASS gist_timetz_ops;
+
+DROP OPERATOR CLASS gist_time_ops;
+
+DROP FUNCTION gbt_time_same(internal, internal, internal);
+
+DROP FUNCTION gbt_time_union(bytea, internal);
+      
+DROP FUNCTION gbt_time_picksplit(internal, internal);
+   
+DROP FUNCTION gbt_time_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_timetz_compress(internal);
+
+DROP FUNCTION gbt_time_compress(internal);
+
+DROP FUNCTION gbt_timetz_consistent(internal,timetz,int2);
+
+DROP FUNCTION gbt_time_consistent(internal,time,int2);
+
+DROP OPERATOR CLASS gist_timestamptz_ops;
+
+DROP OPERATOR CLASS gist_timestamp_ops;
+
+DROP FUNCTION gbt_ts_same(internal, internal, internal);
+
+DROP FUNCTION gbt_ts_union(bytea, internal);
+      
+DROP FUNCTION gbt_ts_picksplit(internal, internal);
+   
+DROP FUNCTION gbt_ts_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_tstz_compress(internal);
+
+DROP FUNCTION gbt_ts_compress(internal);
+      
+DROP FUNCTION gbt_tstz_consistent(internal,timestamptz,int2);
+
+DROP FUNCTION gbt_ts_consistent(internal,timestamp,int2);
+
+DROP OPERATOR CLASS gist_float8_ops;
+
+DROP FUNCTION gbt_float8_same(internal, internal, internal);
+
+DROP FUNCTION gbt_float8_union(bytea, internal);
+
+DROP FUNCTION gbt_float8_picksplit(internal, internal);
+
+DROP FUNCTION gbt_float8_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_float8_compress(internal);
+
+DROP FUNCTION gbt_float8_consistent(internal,float8,int2);
+
+DROP OPERATOR CLASS gist_float4_ops;
+
+DROP FUNCTION gbt_float4_same(internal, internal, internal);
+
+DROP FUNCTION gbt_float4_union(bytea, internal);
+
+DROP FUNCTION gbt_float4_picksplit(internal, internal);
+
+DROP FUNCTION gbt_float4_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_float4_compress(internal);
+
+DROP FUNCTION gbt_float4_consistent(internal,float4,int2);
+
+DROP OPERATOR CLASS gist_int8_ops;
+
+DROP FUNCTION gbt_int8_same(internal, internal, internal);
+
+DROP FUNCTION gbt_int8_union(bytea, internal);
+
+DROP FUNCTION gbt_int8_picksplit(internal, internal);
+
+DROP FUNCTION gbt_int8_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_int8_compress(internal);
+
+DROP FUNCTION gbt_int8_consistent(internal,int8,int2);
+
+DROP OPERATOR CLASS gist_int4_ops;
+
+DROP FUNCTION gbt_int4_same(internal, internal, internal);
+
+DROP FUNCTION gbt_int4_union(bytea, internal);
+
+DROP FUNCTION gbt_int4_picksplit(internal, internal);
+
+DROP FUNCTION gbt_int4_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_int4_compress(internal);
+
+DROP FUNCTION gbt_int4_consistent(internal,int4,int2);
+
+DROP OPERATOR CLASS gist_int2_ops;
+
+DROP FUNCTION gbt_int2_same(internal, internal, internal);
+
+DROP FUNCTION gbt_int2_union(bytea, internal);
+
+DROP FUNCTION gbt_int2_picksplit(internal, internal);
+
+DROP FUNCTION gbt_int2_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_int2_compress(internal);
+
+DROP FUNCTION gbt_int2_consistent(internal,int2,int2);
+
+DROP OPERATOR CLASS gist_oid_ops;
+
+DROP FUNCTION gbt_oid_same(internal, internal, internal);
+
+DROP FUNCTION gbt_oid_union(bytea, internal);
+
+DROP FUNCTION gbt_oid_picksplit(internal, internal);
+
+DROP FUNCTION gbt_oid_penalty(internal,internal,internal);
+
+DROP FUNCTION gbt_var_decompress(internal);
+
+DROP FUNCTION gbt_decompress(internal);
+
+DROP FUNCTION gbt_oid_compress(internal);
+
+DROP FUNCTION gbt_oid_consistent(internal,oid,int2);
+
+DROP TYPE gbtreekey_var;
+
+DROP FUNCTION gbtreekey_var_out(gbtreekey_var);
+
+DROP FUNCTION gbtreekey_var_in(cstring);
+
+DROP TYPE gbtreekey32;
+
+DROP FUNCTION gbtreekey32_out(gbtreekey32);
+
+DROP FUNCTION gbtreekey32_in(cstring);
+
+DROP TYPE gbtreekey16;
+
+DROP FUNCTION gbtreekey16_out(gbtreekey16);
+
+DROP FUNCTION gbtreekey16_in(cstring);
+
+DROP TYPE gbtreekey8;
+
+DROP FUNCTION gbtreekey8_out(gbtreekey8);
+
+DROP FUNCTION gbtreekey8_in(cstring);
+
+DROP TYPE gbtreekey4;
+
+DROP FUNCTION gbtreekey4_out(gbtreekey4);
+
+DROP FUNCTION gbtreekey4_in(cstring);
diff --git a/contrib/chkpass/Makefile b/contrib/chkpass/Makefile
index a9e8f2d91e5866c6dc1bc169213bc9955f1d86be..af7f492b3acb9d38bd807c04cfd228bc411d573a 100644
--- a/contrib/chkpass/Makefile
+++ b/contrib/chkpass/Makefile
@@ -1,9 +1,10 @@
-# $PostgreSQL: pgsql/contrib/chkpass/Makefile,v 1.7 2005/09/27 17:13:00 tgl Exp $
+# $PostgreSQL: pgsql/contrib/chkpass/Makefile,v 1.8 2006/02/27 12:54:38 petere Exp $
 
 MODULE_big = chkpass
 OBJS = chkpass.o
 SHLIB_LINK = $(filter -lcrypt, $(LIBS))
 DATA_built = chkpass.sql
+DATA = uninstall_chkpass.sql
 DOCS = README.chkpass
 
 ifdef USE_PGXS
diff --git a/contrib/chkpass/uninstall_chkpass.sql b/contrib/chkpass/uninstall_chkpass.sql
new file mode 100644
index 0000000000000000000000000000000000000000..f1f8574bcc787e1eda5f2f8c076269e5ae45768e
--- /dev/null
+++ b/contrib/chkpass/uninstall_chkpass.sql
@@ -0,0 +1,28 @@
+SET search_path = public;
+
+DROP OPERATOR <>; (
+	leftarg = chkpass,
+	rightarg = text,
+	negator = =,
+	procedure = ne
+);
+
+DROP OPERATOR =; (
+	leftarg = chkpass,
+	rightarg = text,
+	commutator = =,
+--	negator = <>,
+	procedure = eq
+);
+
+DROP FUNCTION ne(chkpass, text);
+
+DROP FUNCTION eq(chkpass, text);
+
+DROP FUNCTION raw(chkpass);
+
+DROP TYPE chkpass;
+
+DROP FUNCTION chkpass_out(chkpass);
+
+DROP FUNCTION chkpass_in(cstring);
diff --git a/contrib/cube/Makefile b/contrib/cube/Makefile
index 331b4c938571a0cfeea0a3cfb9438ca970759495..e1b9f14244e0deb77cc2d6456488350e1de841ab 100644
--- a/contrib/cube/Makefile
+++ b/contrib/cube/Makefile
@@ -1,9 +1,10 @@
-# $PostgreSQL: pgsql/contrib/cube/Makefile,v 1.15 2005/10/18 01:30:48 tgl Exp $
+# $PostgreSQL: pgsql/contrib/cube/Makefile,v 1.16 2006/02/27 12:54:38 petere Exp $
 
 MODULE_big = cube
 OBJS= cube.o cubeparse.o
 
 DATA_built = cube.sql
+DATA = uninstall_cube.sql
 DOCS = README.cube
 REGRESS = cube
 
diff --git a/contrib/cube/uninstall_cube.sql b/contrib/cube/uninstall_cube.sql
new file mode 100644
index 0000000000000000000000000000000000000000..a6a177703a568d484aa346397d51828e5363c984
--- /dev/null
+++ b/contrib/cube/uninstall_cube.sql
@@ -0,0 +1,93 @@
+SET search_path = public;
+
+DROP OPERATOR CLASS gist_cube_ops;
+
+DROP OPERATOR CLASS cube_ops;
+
+DROP FUNCTION g_cube_same(cube, cube, internal);
+
+DROP FUNCTION g_cube_union(internal, internal);
+
+DROP FUNCTION g_cube_picksplit(internal, internal);
+
+DROP FUNCTION g_cube_penalty(internal,internal,internal);
+
+DROP FUNCTION g_cube_decompress(internal);
+
+DROP FUNCTION g_cube_compress(internal);
+
+DROP FUNCTION g_cube_consistent(internal,cube,int4);
+
+DROP OPERATOR ~ (cube, cube);
+
+DROP OPERATOR @ (cube, cube);
+
+DROP OPERATOR <> (cube, cube);
+
+DROP OPERATOR = (cube, cube);
+
+DROP OPERATOR && (cube, cube);
+
+DROP OPERATOR >= (cube, cube);
+
+DROP OPERATOR <= (cube, cube);
+
+DROP OPERATOR > (cube, cube);
+
+DROP OPERATOR < (cube, cube);
+
+DROP FUNCTION cube_enlarge(cube, float8, int4);
+
+DROP FUNCTION cube_is_point(cube);
+
+DROP FUNCTION cube(cube, float8, float8);
+
+DROP FUNCTION cube(cube, float8);
+
+DROP FUNCTION cube(float8, float8);
+
+DROP FUNCTION cube(float8);
+
+DROP FUNCTION cube_ur_coord(cube, int4);
+
+DROP FUNCTION cube_ll_coord(cube, int4);
+
+DROP FUNCTION cube_dim(cube);
+
+DROP FUNCTION cube_distance(cube, cube);
+
+DROP FUNCTION cube_size(cube);
+
+DROP FUNCTION cube_inter(cube, cube);
+
+DROP FUNCTION cube_union(cube, cube);
+
+DROP FUNCTION cube_overlap(cube, cube);
+
+DROP FUNCTION cube_contained(cube, cube);
+
+DROP FUNCTION cube_contains(cube, cube);
+
+DROP FUNCTION cube_cmp(cube, cube);
+
+DROP FUNCTION cube_ge(cube, cube);
+
+DROP FUNCTION cube_le(cube, cube);
+
+DROP FUNCTION cube_gt(cube, cube);
+
+DROP FUNCTION cube_lt(cube, cube);
+
+DROP FUNCTION cube_ne(cube, cube);
+
+DROP FUNCTION cube_eq(cube, cube);
+
+DROP CAST (text AS cube);
+
+DROP FUNCTION cube(text);
+
+DROP FUNCTION cube_out(cube);
+
+DROP TYPE cube;
+
+DROP FUNCTION cube_in(cstring);
diff --git a/contrib/dblink/Makefile b/contrib/dblink/Makefile
index 8fa350807b7bd45cfdf9545cbfe9f20a952f2e2f..1c8b6587545fae5ee5ca49e501e957849ec7f50b 100644
--- a/contrib/dblink/Makefile
+++ b/contrib/dblink/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/dblink/Makefile,v 1.10 2005/09/27 17:13:01 tgl Exp $
+# $PostgreSQL: pgsql/contrib/dblink/Makefile,v 1.11 2006/02/27 12:54:38 petere Exp $
 
 MODULE_big = dblink
 PG_CPPFLAGS = -I$(libpq_srcdir)
@@ -6,6 +6,7 @@ OBJS	= dblink.o
 SHLIB_LINK = $(libpq)
 
 DATA_built = dblink.sql 
+DATA = uninstall_dblink.sql 
 DOCS = README.dblink
 REGRESS = dblink
 
diff --git a/contrib/dblink/uninstall_dblink.sql b/contrib/dblink/uninstall_dblink.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4ef8e0817084f80f09706b33a7683f38b818cabc
--- /dev/null
+++ b/contrib/dblink/uninstall_dblink.sql
@@ -0,0 +1,59 @@
+DROP FUNCTION dblink_current_query ();
+
+DROP FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text);
+
+DROP FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text);
+
+DROP FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text);
+
+DROP FUNCTION dblink_get_pkey (text);
+
+CREATE TYPE dblink_pkey_results AS (position int4, colname text);
+
+DROP FUNCTION dblink_exec (text,bool);
+
+DROP FUNCTION dblink_exec (text);
+
+DROP FUNCTION dblink_exec (text,text,bool);
+
+DROP FUNCTION dblink_exec (text,text);
+
+DROP FUNCTION dblink (text,bool);
+
+DROP FUNCTION dblink (text);
+
+DROP FUNCTION dblink (text,text,bool);
+
+DROP FUNCTION dblink (text,text);
+
+DROP FUNCTION dblink_close (text,text,bool);
+
+DROP FUNCTION dblink_close (text,text);
+
+DROP FUNCTION dblink_close (text,bool);
+
+DROP FUNCTION dblink_close (text);
+
+DROP FUNCTION dblink_fetch (text,text,int,bool);
+
+DROP FUNCTION dblink_fetch (text,text,int);
+
+DROP FUNCTION dblink_fetch (text,int,bool);
+
+DROP FUNCTION dblink_fetch (text,int);
+
+DROP FUNCTION dblink_open (text,text,text,bool);
+
+DROP FUNCTION dblink_open (text,text,text);
+
+DROP FUNCTION dblink_open (text,text,bool);
+
+DROP FUNCTION dblink_open (text,text);
+
+DROP FUNCTION dblink_disconnect (text);
+
+DROP FUNCTION dblink_disconnect ();
+
+DROP FUNCTION dblink_connect (text, text);
+
+DROP FUNCTION dblink_connect (text);
diff --git a/contrib/earthdistance/Makefile b/contrib/earthdistance/Makefile
index b22653ff16608bc30af872bf8e11582f433fdab8..787957acef5b6486d53c66237555bb73458704b9 100644
--- a/contrib/earthdistance/Makefile
+++ b/contrib/earthdistance/Makefile
@@ -1,7 +1,8 @@
-# $PostgreSQL: pgsql/contrib/earthdistance/Makefile,v 1.16 2005/09/27 17:13:02 tgl Exp $
+# $PostgreSQL: pgsql/contrib/earthdistance/Makefile,v 1.17 2006/02/27 12:54:38 petere Exp $
 
 MODULES = earthdistance
 DATA_built = earthdistance.sql
+DATA = uninstall_earthdistance.sql
 DOCS = README.earthdistance
 REGRESS = earthdistance
 
diff --git a/contrib/earthdistance/uninstall_earthdistance.sql b/contrib/earthdistance/uninstall_earthdistance.sql
new file mode 100644
index 0000000000000000000000000000000000000000..95e414564255671afbdc6b3c066638083de53ff7
--- /dev/null
+++ b/contrib/earthdistance/uninstall_earthdistance.sql
@@ -0,0 +1,23 @@
+SET search_path = public;
+
+DROP OPERATOR <@> (point, point);
+
+DROP FUNCTION geo_distance (point, point);
+
+DROP FUNCTION earth_box(earth, float8);
+
+DROP FUNCTION earth_distance(earth, earth);
+
+DROP FUNCTION longitude(earth);
+
+DROP FUNCTION latitude(earth);
+
+DROP FUNCTION ll_to_earth(float8, float8);
+
+DROP FUNCTION gc_to_sec(float8);
+
+DROP FUNCTION sec_to_gc(float8);
+
+DROP DOMAIN earth;
+
+DROP FUNCTION earth();
diff --git a/contrib/fuzzystrmatch/Makefile b/contrib/fuzzystrmatch/Makefile
index 97656547665497d32a4587a37c39c25704193b70..3f273113532f8da1684429b088be614e89cb6391 100644
--- a/contrib/fuzzystrmatch/Makefile
+++ b/contrib/fuzzystrmatch/Makefile
@@ -1,9 +1,10 @@
-# $PostgreSQL: pgsql/contrib/fuzzystrmatch/Makefile,v 1.6 2005/09/27 17:13:03 tgl Exp $
+# $PostgreSQL: pgsql/contrib/fuzzystrmatch/Makefile,v 1.7 2006/02/27 12:54:38 petere Exp $
 
 MODULE_big = fuzzystrmatch
 SRCS += fuzzystrmatch.c dmetaphone.c
 OBJS = $(SRCS:.c=.o)
 DATA_built = fuzzystrmatch.sql
+DATA = uninstall_fuzzystrmatch.sql
 DOCS = README.fuzzystrmatch README.soundex
 
 ifdef USE_PGXS
diff --git a/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql b/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql
new file mode 100644
index 0000000000000000000000000000000000000000..ee377e47b424fcca6263cf7ca15eca376be72577
--- /dev/null
+++ b/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql
@@ -0,0 +1,16 @@
+-- Adjust this setting to control where the objects get created.
+SET search_path = public;
+
+DROP FUNCTION dmetaphone_alt (text);
+
+DROP FUNCTION dmetaphone (text);
+
+DROP FUNCTION difference(text,text);
+
+DROP FUNCTION text_soundex(text);
+
+DROP FUNCTION soundex(text);
+
+DROP FUNCTION metaphone (text,int);
+
+DROP FUNCTION levenshtein (text,text);
diff --git a/contrib/intagg/Makefile b/contrib/intagg/Makefile
index fe14943997165fc8c66e2f1af3794489e4791953..084d78b1d72a382d14f42b84438ee43dfee55920 100644
--- a/contrib/intagg/Makefile
+++ b/contrib/intagg/Makefile
@@ -2,10 +2,11 @@
 # Makefile for integer aggregator
 # Copyright (C) 2001 Digital Music Network.
 # by Mark L. Woodward
-# $PostgreSQL: pgsql/contrib/intagg/Makefile,v 1.6 2005/09/27 17:13:03 tgl Exp $
+# $PostgreSQL: pgsql/contrib/intagg/Makefile,v 1.7 2006/02/27 12:54:39 petere Exp $
 
 MODULES = int_aggregate
 DATA_built = int_aggregate.sql
+DATA = uninstall_int_aggregate.sql
 DOCS = README.int_aggregate
 
 ifdef USE_PGXS
diff --git a/contrib/intagg/uninstall_int_aggregate.sql b/contrib/intagg/uninstall_int_aggregate.sql
new file mode 100644
index 0000000000000000000000000000000000000000..a64d5e98cbf776f57360f5ca972d84083065b339
--- /dev/null
+++ b/contrib/intagg/uninstall_int_aggregate.sql
@@ -0,0 +1,9 @@
+SET search_path = public;
+
+DROP FUNCTION int_array_enum(int4[]);
+
+DROP AGGREGATE int_array_aggregate (int4);
+
+DROP FUNCTION int_agg_final_array (int4[]);
+
+DROP FUNCTION int_agg_state (int4[], int4);
diff --git a/contrib/intarray/Makefile b/contrib/intarray/Makefile
index 17714b24cbcc01a388e133bea4ffe772770552fc..b3830a2dde022a9e27cd05cd0cd7f991fa7b435a 100644
--- a/contrib/intarray/Makefile
+++ b/contrib/intarray/Makefile
@@ -1,8 +1,9 @@
-# $PostgreSQL: pgsql/contrib/intarray/Makefile,v 1.12 2005/09/27 17:13:04 tgl Exp $
+# $PostgreSQL: pgsql/contrib/intarray/Makefile,v 1.13 2006/02/27 12:54:39 petere Exp $
 
 MODULE_big = _int
 OBJS = _int_bool.o _int_gist.o _int_op.o _int_tool.o _intbig_gist.o 
 DATA_built = _int.sql
+DATA = uninstall__int.sql
 DOCS = README.intarray
 REGRESS = _int
 
diff --git a/contrib/intarray/uninstall__int.sql b/contrib/intarray/uninstall__int.sql
new file mode 100644
index 0000000000000000000000000000000000000000..92dc92aeae5cb1cfe88156b05775d019144454fc
--- /dev/null
+++ b/contrib/intarray/uninstall__int.sql
@@ -0,0 +1,123 @@
+SET search_path = public;
+
+DROP OPERATOR CLASS gist__intbig_ops;
+
+DROP FUNCTION g_intbig_same(internal, internal, internal);
+
+DROP FUNCTION g_intbig_union(internal, internal);
+
+DROP FUNCTION g_intbig_picksplit(internal, internal);
+
+DROP FUNCTION g_intbig_penalty(internal,internal,internal);
+
+DROP FUNCTION g_intbig_decompress(internal);
+
+DROP FUNCTION g_intbig_compress(internal);
+
+DROP FUNCTION g_intbig_consistent(internal,internal,int4);
+
+DROP TYPE intbig_gkey;
+
+DROP FUNCTION _intbig_out(intbig_gkey);
+
+DROP FUNCTION _intbig_in(cstring);
+
+DROP OPERATOR CLASS gist__int_ops;
+
+DROP FUNCTION g_int_same(_int4, _int4, internal);
+
+DROP FUNCTION g_int_union(internal, internal);
+
+DROP FUNCTION g_int_picksplit(internal, internal);
+
+DROP FUNCTION g_int_penalty(internal,internal,internal);
+
+DROP FUNCTION g_int_decompress(internal);
+
+DROP FUNCTION g_int_compress(internal);
+
+DROP FUNCTION g_int_consistent(internal,_int4,int4);
+
+DROP OPERATOR & (_int4, _int4);
+
+DROP OPERATOR - (_int4, _int4);
+
+DROP FUNCTION intset_subtract(_int4, _int4);
+
+DROP OPERATOR | (_int4, _int4);
+
+DROP OPERATOR | (_int4, int4);
+
+DROP FUNCTION intset_union_elem(_int4, int4);
+
+DROP OPERATOR - (_int4, int4);
+
+DROP FUNCTION intarray_del_elem(_int4, int4);
+
+DROP OPERATOR + (_int4, _int4);
+
+DROP FUNCTION intarray_push_array(_int4, _int4);
+
+DROP OPERATOR + (_int4, int4);
+
+DROP FUNCTION intarray_push_elem(_int4, int4);
+
+DROP FUNCTION subarray(_int4, int4);
+
+DROP FUNCTION subarray(_int4, int4, int4);
+
+DROP OPERATOR # (_int4, int4);
+
+DROP FUNCTION idx(_int4, int4);
+
+DROP FUNCTION uniq(_int4);
+
+DROP FUNCTION sort_desc(_int4);
+
+DROP FUNCTION sort_asc(_int4);
+
+DROP FUNCTION sort(_int4);
+
+DROP FUNCTION sort(_int4, text);
+
+DROP OPERATOR # (NONE, _int4);
+
+DROP FUNCTION icount(_int4);
+
+DROP FUNCTION intset(int4);
+
+DROP OPERATOR ~ (_int4, _int4);
+
+DROP OPERATOR @ (_int4, _int4);
+
+DROP OPERATOR && (_int4, _int4);
+
+DROP FUNCTION _int_inter(_int4, _int4);
+
+DROP FUNCTION _int_union(_int4, _int4);
+
+DROP FUNCTION _int_different(_int4, _int4);
+
+DROP FUNCTION _int_same(_int4, _int4);
+
+DROP FUNCTION _int_overlap(_int4, _int4);
+
+DROP FUNCTION _int_contained(_int4, _int4);
+
+DROP FUNCTION _int_contains(_int4, _int4);
+
+DROP OPERATOR ~~ (query_int, _int4);
+
+DROP OPERATOR @@ (_int4, query_int);
+
+DROP FUNCTION rboolop(query_int, _int4);
+
+DROP FUNCTION boolop(_int4, query_int);
+
+DROP FUNCTION querytree(query_int);
+
+DROP TYPE query_int;
+
+DROP FUNCTION bqarr_out(query_int);
+
+DROP FUNCTION bqarr_in(cstring);
diff --git a/contrib/isbn_issn/Makefile b/contrib/isbn_issn/Makefile
index 2e900ba42d363cf1ee8c626bf5b25984bdf95fe8..c208d9bd892b783f10902e71fa795756be21054b 100644
--- a/contrib/isbn_issn/Makefile
+++ b/contrib/isbn_issn/Makefile
@@ -1,7 +1,8 @@
-# $PostgreSQL: pgsql/contrib/isbn_issn/Makefile,v 1.14 2005/09/27 17:13:04 tgl Exp $
+# $PostgreSQL: pgsql/contrib/isbn_issn/Makefile,v 1.15 2006/02/27 12:54:39 petere Exp $
 
 MODULES = isbn_issn
 DATA_built = isbn_issn.sql
+DATA = uninstall_isbn_issn.sql
 DOCS = README.isbn_issn
 
 ifdef USE_PGXS
diff --git a/contrib/isbn_issn/uninstall_isbn_issn.sql b/contrib/isbn_issn/uninstall_isbn_issn.sql
new file mode 100644
index 0000000000000000000000000000000000000000..d6356e1b4c6c794d16d27edcc443fa4b09cb05a1
--- /dev/null
+++ b/contrib/isbn_issn/uninstall_isbn_issn.sql
@@ -0,0 +1,69 @@
+SET search_path = public;
+
+DROP OPERATOR CLASS isbn_ops;
+
+DROP FUNCTION isbn_cmp(isbn, isbn);
+
+DROP OPERATOR <> (isbn, isbn);
+
+DROP OPERATOR > (isbn, isbn);
+
+DROP OPERATOR >= (isbn, isbn);
+
+DROP OPERATOR = (isbn, isbn);
+
+DROP OPERATOR <= (isbn, isbn);
+
+DROP OPERATOR < (isbn, isbn);
+
+DROP FUNCTION isbn_ne(isbn, isbn);
+
+DROP FUNCTION isbn_gt(isbn, isbn);
+
+DROP FUNCTION isbn_ge(isbn, isbn);
+
+DROP FUNCTION isbn_eq(isbn, isbn);
+
+DROP FUNCTION isbn_le(isbn, isbn);
+
+DROP FUNCTION isbn_lt(isbn, isbn);
+
+DROP TYPE isbn;
+
+DROP FUNCTION isbn_out(isbn);
+
+DROP FUNCTION isbn_in(cstring);
+
+DROP OPERATOR CLASS issn_ops;
+
+DROP FUNCTION issn_cmp(issn, issn);
+
+DROP OPERATOR <> (issn, issn);
+
+DROP OPERATOR > (issn, issn);
+
+DROP OPERATOR >= (issn, issn);
+
+DROP OPERATOR = (issn, issn);
+
+DROP OPERATOR <= (issn, issn);
+
+DROP OPERATOR < (issn, issn);
+
+DROP FUNCTION issn_ne(issn, issn);
+
+DROP FUNCTION issn_gt(issn, issn);
+
+DROP FUNCTION issn_ge(issn, issn);
+
+DROP FUNCTION issn_eq(issn, issn);
+
+DROP FUNCTION issn_le(issn, issn);
+
+DROP FUNCTION issn_lt(issn, issn);
+
+DROP TYPE issn;
+
+DROP FUNCTION issn_out(issn);
+
+DROP FUNCTION issn_in(cstring);
diff --git a/contrib/ltree/Makefile b/contrib/ltree/Makefile
index 982c55d7a2530115aec5d613335f0bdb163e19d4..676dbe7ecd33dccc4b446a64c8e1d4071e8a0579 100644
--- a/contrib/ltree/Makefile
+++ b/contrib/ltree/Makefile
@@ -3,6 +3,7 @@ MODULE_big = ltree
 OBJS = 	ltree_io.o ltree_op.o lquery_op.o _ltree_op.o crc32.o \
 	ltxtquery_io.o ltxtquery_op.o ltree_gist.o _ltree_gist.o
 DATA_built = ltree.sql
+DATA = uninstall_ltree.sql
 DOCS = README.ltree
 REGRESS = ltree
 
diff --git a/contrib/ltree/uninstall_ltree.sql b/contrib/ltree/uninstall_ltree.sql
new file mode 100644
index 0000000000000000000000000000000000000000..f9977cde5360c9ae80f456261f7fa1315685e38c
--- /dev/null
+++ b/contrib/ltree/uninstall_ltree.sql
@@ -0,0 +1,251 @@
+SET search_path = public;
+
+DROP OPERATOR CLASS gist__ltree_ops;
+
+DROP FUNCTION _ltree_same(internal, internal, internal);
+
+DROP FUNCTION _ltree_union(internal, internal);
+
+DROP FUNCTION _ltree_picksplit(internal, internal);
+
+DROP FUNCTION _ltree_penalty(internal,internal,internal);
+
+DROP FUNCTION _ltree_compress(internal);
+
+DROP FUNCTION _ltree_consistent(internal,internal,int2);
+
+DROP OPERATOR ?@ (_ltree, ltxtquery);
+
+DROP FUNCTION _ltxtq_extract_exec(_ltree,ltxtquery);
+
+DROP OPERATOR ?~ (_ltree, lquery);
+
+DROP FUNCTION _ltq_extract_regex(_ltree,lquery);
+
+DROP OPERATOR ?<@ (_ltree, ltree);
+
+DROP FUNCTION _ltree_extract_risparent(_ltree,ltree);
+
+DROP OPERATOR ?@> (_ltree, ltree);
+
+DROP FUNCTION _ltree_extract_isparent(_ltree,ltree);
+
+DROP OPERATOR ^@ (ltxtquery, _ltree);
+
+DROP OPERATOR ^@ (_ltree, ltxtquery);
+
+DROP OPERATOR ^? (_lquery, _ltree);
+
+DROP OPERATOR ^? (_ltree, _lquery);
+
+DROP OPERATOR ^~ (lquery, _ltree);
+
+DROP OPERATOR ^~ (_ltree, lquery);
+
+DROP OPERATOR ^@> (ltree, _ltree);
+
+DROP OPERATOR ^<@ (_ltree, ltree);
+
+DROP OPERATOR ^<@ (ltree, _ltree);
+
+DROP OPERATOR ^@> (_ltree, ltree);
+
+DROP OPERATOR @ (ltxtquery, _ltree);
+
+DROP OPERATOR @ (_ltree, ltxtquery);
+
+DROP OPERATOR ? (_lquery, _ltree);
+
+DROP OPERATOR ? (_ltree, _lquery);
+
+DROP OPERATOR ~ (lquery, _ltree);
+
+DROP OPERATOR ~ (_ltree, lquery);
+
+DROP OPERATOR @> (ltree, _ltree);
+
+DROP OPERATOR <@ (_ltree, ltree);
+
+DROP OPERATOR <@ (ltree, _ltree);
+
+DROP OPERATOR @> (_ltree, ltree);
+
+DROP FUNCTION _ltxtq_rexec(ltxtquery, _ltree);
+
+DROP FUNCTION _ltxtq_exec(_ltree, ltxtquery);
+
+DROP FUNCTION _lt_q_rregex(_lquery,_ltree);
+
+DROP FUNCTION _lt_q_regex(_ltree,_lquery);
+
+DROP FUNCTION _ltq_rregex(lquery,_ltree);
+
+DROP FUNCTION _ltq_regex(_ltree,lquery);
+
+DROP FUNCTION _ltree_r_risparent(ltree,_ltree);
+
+DROP FUNCTION _ltree_risparent(_ltree,ltree);
+
+DROP FUNCTION _ltree_r_isparent(ltree,_ltree);
+
+DROP FUNCTION _ltree_isparent(_ltree,ltree);
+
+DROP OPERATOR CLASS gist_ltree_ops;
+
+DROP FUNCTION ltree_same(internal, internal, internal);
+
+DROP FUNCTION ltree_union(internal, internal);
+
+DROP FUNCTION ltree_picksplit(internal, internal);
+
+DROP FUNCTION ltree_penalty(internal,internal,internal);
+
+DROP FUNCTION ltree_decompress(internal);
+
+DROP FUNCTION ltree_compress(internal);
+
+DROP FUNCTION ltree_consistent(internal,internal,int2);
+
+DROP TYPE ltree_gist;   
+  
+DROP FUNCTION ltree_gist_out(ltree_gist);
+  
+DROP FUNCTION ltree_gist_in(cstring);
+
+DROP OPERATOR ^@ (ltxtquery, ltree);
+
+DROP OPERATOR ^@ (ltree, ltxtquery);
+
+DROP OPERATOR @ (ltxtquery, ltree);
+
+DROP OPERATOR @ (ltree, ltxtquery);
+
+DROP FUNCTION ltxtq_rexec(ltxtquery, ltree);
+
+DROP FUNCTION ltxtq_exec(ltree, ltxtquery);
+
+DROP TYPE ltxtquery;
+
+DROP FUNCTION ltxtq_out(ltxtquery);
+
+DROP FUNCTION ltxtq_in(cstring);
+
+DROP OPERATOR ^? (_lquery, ltree);
+
+DROP OPERATOR ^? (ltree, _lquery);
+
+DROP OPERATOR ? (_lquery, ltree);
+
+DROP OPERATOR ? (ltree, _lquery);
+
+DROP FUNCTION lt_q_rregex(_lquery,ltree);
+
+DROP FUNCTION lt_q_regex(ltree,_lquery);
+
+DROP OPERATOR ^~ (lquery, ltree);
+
+DROP OPERATOR ^~ (ltree, lquery);
+
+DROP OPERATOR ~ (lquery, ltree);
+
+DROP OPERATOR ~ (ltree, lquery);
+
+DROP FUNCTION ltq_rregex(lquery,ltree);
+
+DROP FUNCTION ltq_regex(ltree,lquery);
+
+DROP TYPE lquery;
+
+DROP FUNCTION lquery_out(lquery);
+
+DROP FUNCTION lquery_in(cstring);
+
+DROP OPERATOR CLASS ltree_ops;
+
+DROP OPERATOR || (text, ltree);
+
+DROP OPERATOR || (ltree, text);
+
+DROP OPERATOR || (ltree, ltree);
+
+DROP OPERATOR ^<@ (ltree, ltree);
+
+DROP OPERATOR <@ (ltree, ltree);
+
+DROP OPERATOR ^@> (ltree, ltree);
+
+DROP OPERATOR @> (ltree, ltree);
+
+DROP FUNCTION ltree_textadd(text,ltree);
+
+DROP FUNCTION ltree_addtext(ltree,text);
+
+DROP FUNCTION ltree_addltree(ltree,ltree);
+
+DROP FUNCTION ltree_risparent(ltree,ltree);
+
+DROP FUNCTION ltree_isparent(ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree,ltree,ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree,ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree,ltree);
+
+DROP FUNCTION lca(ltree,ltree);
+
+DROP FUNCTION lca(_ltree);
+
+DROP FUNCTION text2ltree(text);
+
+DROP FUNCTION ltree2text(ltree);
+
+DROP FUNCTION nlevel(ltree);
+
+DROP FUNCTION index(ltree,ltree,int4);
+
+DROP FUNCTION index(ltree,ltree);
+
+DROP FUNCTION subpath(ltree,int4);
+
+DROP FUNCTION subpath(ltree,int4,int4);
+
+DROP FUNCTION subltree(ltree,int4,int4);
+
+DROP OPERATOR <> (ltree, ltree);
+
+DROP OPERATOR = (ltree, ltree);
+
+DROP OPERATOR > (ltree, ltree);
+
+DROP OPERATOR >= (ltree, ltree);
+
+DROP OPERATOR <= (ltree, ltree);
+
+DROP OPERATOR < (ltree, ltree);
+
+DROP FUNCTION ltree_ne(ltree,ltree);
+
+DROP FUNCTION ltree_gt(ltree,ltree);
+
+DROP FUNCTION ltree_ge(ltree,ltree);
+
+DROP FUNCTION ltree_eq(ltree,ltree);
+
+DROP FUNCTION ltree_le(ltree,ltree);
+
+DROP FUNCTION ltree_lt(ltree,ltree);
+
+DROP FUNCTION ltree_cmp(ltree,ltree);
+
+DROP TYPE ltree;
+
+DROP FUNCTION ltree_out(ltree);
+
+DROP FUNCTION ltree_in(cstring);
diff --git a/contrib/pg_buffercache/Makefile b/contrib/pg_buffercache/Makefile
index 5bec1a20b66cb354e78ec08cd827efa9b3a671e5..5d08beccd3ada319e758146360d678a3c90699b3 100644
--- a/contrib/pg_buffercache/Makefile
+++ b/contrib/pg_buffercache/Makefile
@@ -1,9 +1,10 @@
-# $PostgreSQL: pgsql/contrib/pg_buffercache/Makefile,v 1.2 2005/09/27 17:13:07 tgl Exp $
+# $PostgreSQL: pgsql/contrib/pg_buffercache/Makefile,v 1.3 2006/02/27 12:54:39 petere Exp $
 
 MODULE_big = pg_buffercache
 OBJS	= pg_buffercache_pages.o
 
 DATA_built = pg_buffercache.sql 
+DATA = uninstall_pg_buffercache.sql 
 DOCS = README.pg_buffercache
 
 ifdef USE_PGXS
diff --git a/contrib/pg_buffercache/uninstall_pg_buffercache.sql b/contrib/pg_buffercache/uninstall_pg_buffercache.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4c0c25ad79ee3dbca62b455f44a18d3558bcc8ab
--- /dev/null
+++ b/contrib/pg_buffercache/uninstall_pg_buffercache.sql
@@ -0,0 +1,6 @@
+-- Adjust this setting to control where the objects get created.
+SET search_path = public;
+
+DROP VIEW pg_buffercache;
+
+DROP FUNCTION pg_buffercache_pages();
diff --git a/contrib/pg_trgm/Makefile b/contrib/pg_trgm/Makefile
index 993089151a47a527e13bc54d244e914dd60b0aae..36714409c3b0fde224708a6c3ff194415902a1e3 100644
--- a/contrib/pg_trgm/Makefile
+++ b/contrib/pg_trgm/Makefile
@@ -5,6 +5,7 @@ MODULE_big = pg_trgm
 OBJS = trgm_op.o trgm_gist.o 
 
 DATA_built = pg_trgm.sql
+DATA = uninstall_pg_trgm.sql
 DOCS = README.pg_trgm
 REGRESS = pg_trgm
 
diff --git a/contrib/pg_trgm/uninstall_pg_trgm.sql b/contrib/pg_trgm/uninstall_pg_trgm.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1804078f15854bdad0b4eb7f23948c225085be10
--- /dev/null
+++ b/contrib/pg_trgm/uninstall_pg_trgm.sql
@@ -0,0 +1,39 @@
+SET search_path = public;
+
+BEGIN;
+
+DROP OPERATOR CLASS gist_trgm_ops;
+
+DROP FUNCTION gtrgm_same(gtrgm, gtrgm, internal);
+
+DROP FUNCTION gtrgm_union(bytea, internal);
+
+DROP FUNCTION gtrgm_picksplit(internal, internal);
+
+DROP FUNCTION gtrgm_penalty(internal,internal,internal);
+
+DROP FUNCTION gtrgm_decompress(internal);
+
+DROP FUNCTION gtrgm_compress(internal);
+ 
+DROP FUNCTION gtrgm_consistent(gtrgm,internal,int4);
+
+DROP TYPE gtrgm;
+
+DROP FUNCTION gtrgm_out(gtrgm);
+
+DROP FUNCTION gtrgm_in(cstring);
+
+DROP OPERATOR % (text, text);
+
+DROP FUNCTION similarity_op(text,text);
+
+DROP FUNCTION similarity(text,text);
+
+DROP FUNCTION show_trgm(text);
+
+DROP FUNCTION show_limit();
+
+DROP FUNCTION set_limit(float4);
+
+COMMIT;
diff --git a/contrib/pgstattuple/Makefile b/contrib/pgstattuple/Makefile
index 3a3a02f522f14eeb06d5ee80b34853eeeff7a928..6d25c87867e2daa105aa036d6f6b253441f044e0 100644
--- a/contrib/pgstattuple/Makefile
+++ b/contrib/pgstattuple/Makefile
@@ -2,7 +2,7 @@
 #
 # pgstattuple Makefile
 #
-# $PostgreSQL: pgsql/contrib/pgstattuple/Makefile,v 1.4 2005/09/27 17:13:09 tgl Exp $
+# $PostgreSQL: pgsql/contrib/pgstattuple/Makefile,v 1.5 2006/02/27 12:54:39 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -12,6 +12,7 @@ MODULE_big	= pgstattuple
 OBJS		= $(SRCS:.c=.o)
 DOCS		= README.pgstattuple README.pgstattuple.euc_jp
 DATA_built	= pgstattuple.sql
+DATA      	= uninstall_pgstattuple.sql
 
 ifdef USE_PGXS
 PGXS := $(shell pg_config --pgxs)
diff --git a/contrib/pgstattuple/uninstall_pgstattuple.sql b/contrib/pgstattuple/uninstall_pgstattuple.sql
new file mode 100644
index 0000000000000000000000000000000000000000..efecc3b2e42ca17175b89cb1947eb338f1053e16
--- /dev/null
+++ b/contrib/pgstattuple/uninstall_pgstattuple.sql
@@ -0,0 +1,8 @@
+-- Adjust this setting to control where the objects get created.
+SET search_path = public;
+
+DROP FUNCTION pgstattuple(oid);
+
+DROP FUNCTION pgstattuple(text);
+
+DROP TYPE pgstattuple_type;
diff --git a/contrib/seg/Makefile b/contrib/seg/Makefile
index face0c41778741bf3baf61bd2d715c79392f65ec..d40bf42c6e0deb22ed5525aa1eaafb0911dad89c 100644
--- a/contrib/seg/Makefile
+++ b/contrib/seg/Makefile
@@ -1,8 +1,9 @@
-# $PostgreSQL: pgsql/contrib/seg/Makefile,v 1.14 2005/10/18 01:30:48 tgl Exp $
+# $PostgreSQL: pgsql/contrib/seg/Makefile,v 1.15 2006/02/27 12:54:39 petere Exp $
 
 MODULE_big = seg
 OBJS = seg.o segparse.o
 DATA_built = seg.sql
+DATA = uninstall_seg.sql
 DOCS = README.seg
 REGRESS = seg
 
diff --git a/contrib/seg/uninstall_seg.sql b/contrib/seg/uninstall_seg.sql
new file mode 100644
index 0000000000000000000000000000000000000000..50e7d243223f05c0005b66a10f0f8ccd73a0fa09
--- /dev/null
+++ b/contrib/seg/uninstall_seg.sql
@@ -0,0 +1,89 @@
+SET search_path = public;
+
+DROP OPERATOR CLASS gist_seg_ops;
+
+DROP OPERATOR CLASS seg_ops;
+
+DROP FUNCTION gseg_same(seg, seg, internal);
+
+DROP FUNCTION gseg_union(internal, internal);
+
+DROP FUNCTION gseg_picksplit(internal, internal);
+
+DROP FUNCTION gseg_penalty(internal,internal,internal);
+
+DROP FUNCTION gseg_decompress(internal);
+
+DROP FUNCTION gseg_compress(internal);
+
+DROP FUNCTION gseg_consistent(internal,seg,int4);
+
+DROP OPERATOR ~ (seg, seg);
+
+DROP OPERATOR @ (seg, seg);
+
+DROP OPERATOR <> (seg, seg);
+
+DROP OPERATOR = (seg, seg);
+
+DROP OPERATOR >> (seg, seg);
+
+DROP OPERATOR &> (seg, seg);
+
+DROP OPERATOR && (seg, seg);
+
+DROP OPERATOR &< (seg, seg);
+
+DROP OPERATOR << (seg, seg);
+
+DROP OPERATOR >= (seg, seg);
+
+DROP OPERATOR > (seg, seg);
+
+DROP OPERATOR <= (seg, seg);
+
+DROP OPERATOR < (seg, seg);
+
+DROP FUNCTION seg_lower(seg);
+
+DROP FUNCTION seg_upper(seg);
+
+DROP FUNCTION seg_size(seg);
+
+DROP FUNCTION seg_inter(seg, seg);
+
+DROP FUNCTION seg_union(seg, seg);
+
+DROP FUNCTION seg_cmp(seg, seg);
+
+DROP FUNCTION seg_different(seg, seg);
+
+DROP FUNCTION seg_same(seg, seg);
+
+DROP FUNCTION seg_overlap(seg, seg);
+
+DROP FUNCTION seg_contained(seg, seg);
+
+DROP FUNCTION seg_contains(seg, seg);
+
+DROP FUNCTION seg_ge(seg, seg);
+
+DROP FUNCTION seg_gt(seg, seg);
+
+DROP FUNCTION seg_le(seg, seg);
+
+DROP FUNCTION seg_lt(seg, seg);
+
+DROP FUNCTION seg_right(seg, seg);
+
+DROP FUNCTION seg_left(seg, seg);
+
+DROP FUNCTION seg_over_right(seg, seg);
+
+DROP FUNCTION seg_over_left(seg, seg);
+
+DROP TYPE seg;
+
+DROP FUNCTION seg_out(seg);
+
+DROP FUNCTION seg_in(cstring);
diff --git a/contrib/tablefunc/Makefile b/contrib/tablefunc/Makefile
index be18f9163e3c31a11952be8bdc694d9336ad3a4c..e2e10c0c9ef5fef20f1930dafea9b290556092c9 100644
--- a/contrib/tablefunc/Makefile
+++ b/contrib/tablefunc/Makefile
@@ -1,5 +1,6 @@
 MODULES = tablefunc
 DATA_built = tablefunc.sql
+DATA = uninstall_tablefunc.sql
 DOCS = README.tablefunc
 REGRESS = tablefunc
 
diff --git a/contrib/tablefunc/uninstall_tablefunc.sql b/contrib/tablefunc/uninstall_tablefunc.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e08f683703267e5ad7c45abaa996ab7021a7101a
--- /dev/null
+++ b/contrib/tablefunc/uninstall_tablefunc.sql
@@ -0,0 +1,29 @@
+SET search_path = public;
+
+DROP FUNCTION connectby(text,text,text,text,text,int);
+
+DROP FUNCTION connectby(text,text,text,text,text,int,text);
+
+DROP FUNCTION connectby(text,text,text,text,int);
+
+DROP FUNCTION connectby(text,text,text,text,int,text);
+
+DROP FUNCTION crosstab(text,text);
+
+DROP FUNCTION crosstab(text,int);
+
+DROP FUNCTION crosstab4(text);
+
+DROP FUNCTION crosstab3(text);
+
+DROP FUNCTION crosstab2(text);
+
+DROP TYPE tablefunc_crosstab_4;
+
+DROP TYPE tablefunc_crosstab_3;
+
+DROP TYPE tablefunc_crosstab_2;
+
+DROP FUNCTION crosstab(text);
+
+DROP FUNCTION normal_rand(int4, float8, float8);
diff --git a/contrib/userlock/Makefile b/contrib/userlock/Makefile
index f2eef6604fcd30241d09f81b846bdd844a82417c..48993d9b93d0d2a07041ebe9b574bb26626a85fe 100644
--- a/contrib/userlock/Makefile
+++ b/contrib/userlock/Makefile
@@ -1,7 +1,8 @@
-# $PostgreSQL: pgsql/contrib/userlock/Makefile,v 1.19 2005/09/27 17:13:13 tgl Exp $
+# $PostgreSQL: pgsql/contrib/userlock/Makefile,v 1.20 2006/02/27 12:54:39 petere Exp $
 
 MODULES = user_locks
 DATA_built = user_locks.sql
+DATA = uninstall_user_locks.sql
 DOCS = README.user_locks
 
 ifdef USE_PGXS
diff --git a/contrib/userlock/uninstall_user_locks.sql b/contrib/userlock/uninstall_user_locks.sql
new file mode 100644
index 0000000000000000000000000000000000000000..178b56e3d0677f4595a6f3372d410450a8809261
--- /dev/null
+++ b/contrib/userlock/uninstall_user_locks.sql
@@ -0,0 +1,23 @@
+SET search_path = public;
+
+DROP FUNCTION user_unlock_all();
+
+DROP FUNCTION user_write_unlock_oid(int4);
+
+DROP FUNCTION user_write_lock_oid(int4);
+
+DROP FUNCTION user_write_unlock_oid(oid);
+
+DROP FUNCTION user_write_lock_oid(oid);
+
+DROP FUNCTION user_write_unlock(int4,oid);
+
+DROP FUNCTION user_write_lock(int4,oid);
+
+DROP FUNCTION user_write_unlock(int4,int4);
+
+DROP FUNCTION user_write_lock(int4,int4);
+
+DROP FUNCTION user_unlock(int4,int4,int4);
+
+DROP FUNCTION user_lock(int4,int4,int4);
diff --git a/contrib/xml2/Makefile b/contrib/xml2/Makefile
index b30da283640528385516068499bbb4abffe927f0..5fdcc9fcd04938c91c209b72e04094645cc2ae0a 100644
--- a/contrib/xml2/Makefile
+++ b/contrib/xml2/Makefile
@@ -9,6 +9,7 @@ OBJS = xpath.o xslt_proc.o
 SHLIB_LINK = -lxml2 -lxslt
 
 DATA_built = pgxml.sql
+DATA = uninstall_pgxml.sql
 DOCS = README.xml2
 
 override CFLAGS += $(shell xml2-config --cflags)
diff --git a/contrib/xml2/uninstall_pgxml.sql b/contrib/xml2/uninstall_pgxml.sql
new file mode 100644
index 0000000000000000000000000000000000000000..b055ce85a5f2b996d75cc3ca40ed36d1f0cdb4db
--- /dev/null
+++ b/contrib/xml2/uninstall_pgxml.sql
@@ -0,0 +1,27 @@
+SET search_path = public;
+
+DROP FUNCTION xslt_process(text,text);
+
+DROP FUNCTION xslt_process(text,text,text);
+
+DROP FUNCTION xpath_table(text,text,text,text,text);
+
+DROP FUNCTION xpath_nodeset(text,text,text);
+
+DROP FUNCTION xpath_nodeset(text,text);
+
+DROP FUNCTION xpath_list(text,text);
+
+DROP FUNCTION xpath_list(text,text,text);
+
+DROP FUNCTION xpath_bool(text,text);
+
+DROP FUNCTION xpath_number(text,text);
+
+DROP FUNCTION xpath_nodeset(text,text,text,text);
+
+DROP FUNCTION xpath_string(text,text);
+
+DROP FUNCTION xml_encode_special_chars(text);
+
+DROP FUNCTION xml_valid(text);