diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml
index ca9eca5138d98b06972fa6a27d3b2ea88138263c..5ebf170bdb6c188ca02637ef614ed5c46d208357 100644
--- a/doc/src/sgml/ref/create_function.sgml
+++ b/doc/src/sgml/ref/create_function.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/create_function.sgml,v 1.84 2008/12/31 02:25:03 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/create_function.sgml,v 1.85 2009/09/03 22:11:07 tgl Exp $
 -->
 
 <refentry id="SQL-CREATEFUNCTION">
@@ -528,8 +528,7 @@ CREATE FUNCTION foo(int, int default 42) ...
     When repeated <command>CREATE FUNCTION</command> calls refer to
     the same object file, the file is only loaded once per session.
     To unload and
-    reload the file (perhaps during development), use the <xref
-    linkend="sql-load" endterm="sql-load-title"> command.
+    reload the file (perhaps during development), start a new session.
    </para>
 
    <para>
diff --git a/doc/src/sgml/ref/load.sgml b/doc/src/sgml/ref/load.sgml
index fca434096bc0e3e83108e556759f430a374b39f0..64237b09f5ac0f224d72741ae80fc57d992448a3 100644
--- a/doc/src/sgml/ref/load.sgml
+++ b/doc/src/sgml/ref/load.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/load.sgml,v 1.25 2008/11/14 10:22:47 petere Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/load.sgml,v 1.26 2009/09/03 22:11:07 tgl Exp $
 -->
 
 <refentry id="SQL-LOAD">
@@ -11,7 +11,7 @@ $PostgreSQL: pgsql/doc/src/sgml/ref/load.sgml,v 1.25 2008/11/14 10:22:47 petere
 
  <refnamediv>
   <refname>LOAD</refname>
-  <refpurpose>load or reload a shared library file</refpurpose>
+  <refpurpose>load a shared library file</refpurpose>
  </refnamediv>
 
  <indexterm zone="sql-load">
@@ -29,13 +29,12 @@ LOAD '<replaceable class="PARAMETER">filename</replaceable>'
 
   <para>
    This command loads a shared library file into the <productname>PostgreSQL</>
-   server's address space.  If the file had been loaded previously,
-   it is first unloaded.  This command is primarily useful to unload
-   and reload a shared library file that has been changed since the
-   server first loaded it.  To make use of the shared library,
-   function(s) in it need to be declared using the <xref
-   linkend="sql-createfunction" endterm="sql-createfunction-title">
-   command.
+   server's address space.  If the file has been loaded already,
+   the command does nothing.  Shared library files that contain C functions
+   are automatically loaded whenever one of their functions is called.
+   Therefore, an explicit <command>LOAD</> is usually only needed to
+   load a library that modifies the server's behavior through <quote>hooks</>
+   rather than providing a set of functions.
   </para>
 
   <para>
diff --git a/doc/src/sgml/xfunc.sgml b/doc/src/sgml/xfunc.sgml
index bb4fd68bb460da0e83c3dc45d69725a586ce2e98..6d85d2d262908850f2544ea11f732e35eb1a1d25 100644
--- a/doc/src/sgml/xfunc.sgml
+++ b/doc/src/sgml/xfunc.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.138 2009/05/27 01:18:06 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/xfunc.sgml,v 1.139 2009/09/03 22:11:07 tgl Exp $ -->
 
  <sect1 id="xfunc">
   <title>User-Defined Functions</title>
@@ -1481,9 +1481,7 @@ PG_MODULE_MAGIC;
     file is retained in memory.  Future calls in the same session to
     the function(s) in that file will only incur the small overhead of
     a symbol table lookup.  If you need to force a reload of an object
-    file, for example after recompiling it, use the <xref
-    linkend="sql-load" endterm="sql-load-title"> command or begin a
-    fresh session.
+    file, for example after recompiling it, begin a fresh session.
    </para>
 
    <indexterm zone="xfunc-c-dynload">
@@ -1509,8 +1507,8 @@ PG_MODULE_MAGIC;
     unloading the file.  Likewise, the function receives no parameters and
     should return void.  Note that <function>_PG_fini</> will only be called
     during an unload of the file, not during process termination.
-    (Presently, an unload only happens in the context of re-loading
-    the file due to an explicit <command>LOAD</> command.)
+    (Presently, unloads are disabled and will never occur, but this may
+    change in the future.)
    </para>
 
   </sect2>
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index 8b819df279c8cd0bf0009ee6fdbb745d4203630c..ef728dc3e8500aadebc10d4fafb031b2ac51a865 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.99 2009/06/11 14:49:05 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.100 2009/09/03 22:11:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -385,10 +385,17 @@ incompatible_module_error(const char *libname,
  * Unload the specified dynamic-link library file, if it is loaded.
  *
  * Note: libname is expected to be an exact name for the library file.
+ *
+ * XXX for the moment, this is disabled, resulting in LOAD of an already-loaded
+ * library always being a no-op.  We might re-enable it someday if we can
+ * convince ourselves we have safe protocols for un-hooking from hook function
+ * pointers, releasing custom GUC variables, and perhaps other things that
+ * are definitely unsafe currently.
  */
 static void
 internal_unload_library(const char *libname)
 {
+#ifdef NOT_USED
 	DynamicFileList *file_scanner,
 			   *prv,
 			   *nxt;
@@ -436,6 +443,7 @@ internal_unload_library(const char *libname)
 		else
 			prv = file_scanner;
 	}
+#endif /* NOT_USED */
 }
 
 static bool