diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index c666f714c3b449329cec36e684e47ee22925c2c9..7ed20e4dd9adba314ec515ee12029486c498de6b 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1199,12 +1199,13 @@ testdb=>
         <literal>n</>, <literal>t</>, or <literal>w</> to the command.
         If <replaceable
         class="parameter">pattern</replaceable> is specified, only
-        functions whose names match the pattern are shown.  If the
-        form <literal>\df+</literal> is used, additional information
-        about each function, including security, volatility, language, source
-        code and description, is shown.  By default, only user-created
+        functions whose names match the pattern are shown.
+        By default, only user-created
         objects are shown; supply a pattern or the <literal>S</literal>
         modifier to include system objects.
+        If the form <literal>\df+</literal> is used, additional information
+        about each function is shown, including security classification,
+        volatility, owner, language, source code and description.
         </para>
 
         <tip>
@@ -1337,15 +1338,18 @@ testdb=&gt;
 
 
       <varlistentry>
-        <term><literal>\do[S] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
+        <term><literal>\do[S+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
         <listitem>
         <para>
-        Lists operators with their operand and return types.
+        Lists operators with their operand and result types.
         If <replaceable class="parameter">pattern</replaceable> is
         specified, only operators whose names match the pattern are listed.
-        By default, only user-created objects are shown;  supply a
+        By default, only user-created objects are shown; supply a
         pattern or the <literal>S</literal> modifier to include system
         objects.
+        If <literal>+</literal> is appended to the command name,
+        additional information about each operator is shown, currently just
+        the name of the underlying function.
         </para>
         </listitem>
       </varlistentry>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index f8572951f18b113c19fe1603fb4e12502116e4c3..49f389071a16d86598248fd9fe3e2eb962bbdd05 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -410,7 +410,7 @@ exec_command(const char *cmd,
 				success = listSchemas(pattern, show_verbose, show_system);
 				break;
 			case 'o':
-				success = describeOperators(pattern, show_system);
+				success = describeOperators(pattern, show_verbose, show_system);
 				break;
 			case 'O':
 				success = listCollations(pattern, show_verbose, show_system);
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index dedb0362d6687cd9681e41d91ee8104b9f06c2f7..0d4b151679a3b1169824d892084cfd32c9e5b0f3 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -577,9 +577,10 @@ describeTypes(const char *pattern, bool verbose, bool showSystem)
 
 
 /* \do
+ * Describe operators
  */
 bool
-describeOperators(const char *pattern, bool showSystem)
+describeOperators(const char *pattern, bool verbose, bool showSystem)
 {
 	PQExpBufferData buf;
 	PGresult   *res;
@@ -605,16 +606,23 @@ describeOperators(const char *pattern, bool showSystem)
 					  "  o.oprname AS \"%s\",\n"
 					  "  CASE WHEN o.oprkind='l' THEN NULL ELSE pg_catalog.format_type(o.oprleft, NULL) END AS \"%s\",\n"
 					  "  CASE WHEN o.oprkind='r' THEN NULL ELSE pg_catalog.format_type(o.oprright, NULL) END AS \"%s\",\n"
-				   "  pg_catalog.format_type(o.oprresult, NULL) AS \"%s\",\n"
-			 "  coalesce(pg_catalog.obj_description(o.oid, 'pg_operator'),\n"
-	"           pg_catalog.obj_description(o.oprcode, 'pg_proc')) AS \"%s\"\n"
-					  "FROM pg_catalog.pg_operator o\n"
-	  "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n",
+				  "  pg_catalog.format_type(o.oprresult, NULL) AS \"%s\",\n",
 					  gettext_noop("Schema"),
 					  gettext_noop("Name"),
 					  gettext_noop("Left arg type"),
 					  gettext_noop("Right arg type"),
-					  gettext_noop("Result type"),
+					  gettext_noop("Result type"));
+
+	if (verbose)
+		appendPQExpBuffer(&buf,
+						  "  o.oprcode AS \"%s\",\n",
+						  gettext_noop("Function"));
+
+	appendPQExpBuffer(&buf,
+			 "  coalesce(pg_catalog.obj_description(o.oid, 'pg_operator'),\n"
+	"           pg_catalog.obj_description(o.oprcode, 'pg_proc')) AS \"%s\"\n"
+					  "FROM pg_catalog.pg_operator o\n"
+	  "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n",
 					  gettext_noop("Description"));
 
 	if (!showSystem && !pattern)
diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h
index 86b86f682899f5c343e9de90a1c8028d8e8133f2..491de920af610c689fb5331737e1248803f7c9c8 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/describe.h
@@ -22,7 +22,7 @@ extern bool describeFunctions(const char *functypes, const char *pattern, bool v
 extern bool describeTypes(const char *pattern, bool verbose, bool showSystem);
 
 /* \do */
-extern bool describeOperators(const char *pattern, bool showSystem);
+extern bool describeOperators(const char *pattern, bool verbose, bool showSystem);
 
 /* \du, \dg */
 extern bool describeRoles(const char *pattern, bool verbose);