diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c
index a39dad6c42dfaa310fb8122b14f83898c684fd9f..fe9829a8cf2cd8aa1d69885e8a8a9773b4af6ec6 100644
--- a/src/backend/utils/mb/mbutils.c
+++ b/src/backend/utils/mb/mbutils.c
@@ -4,7 +4,7 @@
  * (currently mule internal code (mic) is used)
  * Tatsuo Ishii
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v 1.40 2003/04/27 17:31:25 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/mb/mbutils.c,v 1.41 2003/04/27 18:01:46 tgl Exp $
  */
 #include "postgres.h"
 
@@ -106,6 +106,17 @@ SetClientEncoding(int encoding, bool doit)
 		return 0;
 	}
 
+	/*
+	 * If we're not inside a transaction then we can't do catalog lookups,
+	 * so fail.  After backend startup, this could only happen if we
+	 * are re-reading postgresql.conf due to SIGHUP --- so basically this
+	 * just constrains the ability to change client_encoding on the fly
+	 * from postgresql.conf.  Which would probably be a stupid thing to do
+	 * anyway.
+	 */
+	if (!IsTransactionState())
+		return -1;
+
 	/*
 	 * Look up the conversion functions.
 	 */