diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index f5740dc9f9ae3bab8c18a000bfe52e8312b208ec..1ae6730ad0e8dd5fbd8d0995f2787bc124ee0ace 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -12,7 +12,7 @@
  *	by PostgreSQL
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.425 2006/01/06 19:08:33 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.426 2006/01/09 21:16:17 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -6054,9 +6054,10 @@ convertRegProcReference(const char *proc)
  *
  * Returns what to print, or NULL to print nothing
  *
- * In 7.3 the input is a REGOPERATOR display; we have to strip the
- * argument-types part.  In prior versions, the input is just a
- * numeric OID, which we search our operator list for.
+ * In 7.3 and up the input is a REGOPERATOR display; we have to strip the
+ * argument-types part, and add OPERATOR() decoration if the name is
+ * schema-qualified.  In older versions, the input is just a numeric OID,
+ * which we search our operator list for.
  */
 static const char *
 convertOperatorReference(const char *opr)
@@ -6070,23 +6071,34 @@ convertOperatorReference(const char *opr)
 	if (g_fout->remoteVersion >= 70300)
 	{
 		char	   *name;
-		char	   *paren;
+		char	   *oname;
+		char	   *ptr;
 		bool		inquote;
+		bool		sawdot;
 
 		name = strdup(opr);
-		/* find non-double-quoted left paren */
+		/* find non-double-quoted left paren, and check for non-quoted dot */
 		inquote = false;
-		for (paren = name; *paren; paren++)
+		sawdot = false;
+		for (ptr = name; *ptr; ptr++)
 		{
-			if (*paren == '(' && !inquote)
+			if (*ptr == '"')
+				inquote = !inquote;
+			else if (*ptr == '.' && !inquote)
+				sawdot = true;
+			else if (*ptr == '(' && !inquote)
 			{
-				*paren = '\0';
+				*ptr = '\0';
 				break;
 			}
-			if (*paren == '"')
-				inquote = !inquote;
 		}
-		return name;
+		/* If not schema-qualified, don't need to add OPERATOR() */
+		if (!sawdot)
+			return name;
+		oname = malloc(strlen(name) + 11);
+		sprintf(oname, "OPERATOR(%s)", name);
+		free(name);
+		return oname;
 	}
 
 	oprInfo = findOprByOid(atooid(opr));