From dd5f0db96ba68553e3ab2c1d9d117863a5637c67 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 23 Jan 2011 14:13:46 -0500
Subject: [PATCH] Improve getObjectDescription's display of pg_amop and
 pg_amproc entries.

Include the lefttype/righttype columns explicitly (instead of assuming
the reader can deduce them from the operator or function description),
and move the operator or function description to the end of the string,
to make it clearer that it's a referenced object and not the amop or
amproc item itself.  Per extensive discussion of Andreas Karlsson's
original patch.

Andreas Karlsson, Tom Lane
---
 src/backend/catalog/dependency.c | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index ec8eb74954a..ba0ea178ac0 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -2339,13 +2339,17 @@ getObjectDescription(const ObjectAddress *object)
 
 				/*
 				 * translator: %d is the operator strategy (a number), the
-				 * first %s is the textual form of the operator, and the
-				 * second %s is the description of the operator family.
+				 * first two %s's are data type names, the third %s is the
+				 * description of the operator family, and the last %s is the
+				 * textual form of the operator with arguments.
 				 */
-				appendStringInfo(&buffer, _("operator %d %s of %s"),
+				appendStringInfo(&buffer, _("operator %d (%s, %s) of %s: %s"),
 								 amopForm->amopstrategy,
-								 format_operator(amopForm->amopopr),
-								 opfam.data);
+								 format_type_be(amopForm->amoplefttype),
+								 format_type_be(amopForm->amoprighttype),
+								 opfam.data,
+								 format_operator(amopForm->amopopr));
+
 				pfree(opfam.data);
 
 				systable_endscan(amscan);
@@ -2385,14 +2389,18 @@ getObjectDescription(const ObjectAddress *object)
 				getOpFamilyDescription(&opfam, amprocForm->amprocfamily);
 
 				/*
-				 * translator: %d is the function number, the first %s is the
-				 * textual form of the function with arguments, and the second
-				 * %s is the description of the operator family.
+				 * translator: %d is the function number, the first two %s's
+				 * are data type names, the third %s is the description of the
+				 * operator family, and the last %s is the textual form of the
+				 * function with arguments.
 				 */
-				appendStringInfo(&buffer, _("function %d %s of %s"),
+				appendStringInfo(&buffer, _("function %d (%s, %s) of %s: %s"),
 								 amprocForm->amprocnum,
-								 format_procedure(amprocForm->amproc),
-								 opfam.data);
+								 format_type_be(amprocForm->amproclefttype),
+								 format_type_be(amprocForm->amprocrighttype),
+								 opfam.data,
+								 format_procedure(amprocForm->amproc));
+
 				pfree(opfam.data);
 
 				systable_endscan(amscan);
-- 
GitLab