diff --git a/contrib/hstore/Makefile b/contrib/hstore/Makefile
index b0372346780c12b69bd9008900b35932ae713ec1..7ac913ca893a00bb0a47a6f66db2c3cb7fb130cf 100644
--- a/contrib/hstore/Makefile
+++ b/contrib/hstore/Makefile
@@ -9,6 +9,7 @@ MODULE_big = hstore
 OBJS = hstore_io.o hstore_op.o hstore_gist.o crc32.o
 
 DATA_built = hstore.sql
+DATA = uninstall_hstore.sql
 DOCS = README.hstore
 REGRESS = hstore
 
diff --git a/contrib/hstore/uninstall_hstore.sql b/contrib/hstore/uninstall_hstore.sql
new file mode 100644
index 0000000000000000000000000000000000000000..153337ccb0b142a4eff6a7fe57df91ed39b657d4
--- /dev/null
+++ b/contrib/hstore/uninstall_hstore.sql
@@ -0,0 +1,39 @@
+BEGIN;
+
+DROP OPERATOR CLASS gist_hstore_ops USING gist CASCADE;
+
+DROP OPERATOR ->( hstore, text );
+DROP OPERATOR ||( hstore, hstore );
+DROP OPERATOR @>( hstore, hstore );
+DROP OPERATOR <@( hstore, hstore );
+DROP OPERATOR @( hstore, hstore );
+DROP OPERATOR ~( hstore, hstore );
+DROP OPERATOR =>( text, text );
+
+
+DROP FUNCTION fetchval(hstore,text);
+DROP FUNCTION isexists(hstore,text);
+DROP FUNCTION isdefined(hstore,text);
+DROP FUNCTION delete(hstore,text);
+DROP FUNCTION hs_concat(hstore,hstore);
+DROP FUNCTION hs_contains(hstore,hstore);
+DROP FUNCTION hs_contained(hstore,hstore);
+DROP FUNCTION tconvert(text,text);
+DROP FUNCTION akeys(hstore);
+DROP FUNCTION avals(hstore);
+DROP FUNCTION skeys(hstore);
+DROP FUNCTION svals(hstore);
+DROP FUNCTION each(hstore);
+DROP FUNCTION ghstore_compress(internal);
+DROP FUNCTION ghstore_decompress(internal);
+DROP FUNCTION ghstore_penalty(internal,internal,internal);
+DROP FUNCTION ghstore_picksplit(internal, internal);
+DROP FUNCTION ghstore_union(internal, internal);
+DROP FUNCTION ghstore_same(internal, internal, internal);
+DROP FUNCTION ghstore_consistent(internal,internal,int4);
+
+DROP TYPE hstore CASCADE;
+DROP TYPE hs_each CASCADE;
+DROP TYPE ghstore CASCADE;
+
+COMMIT;