When given a nonzero column number, pg_get_indexdef() is only supposed to
authorTom Lane
Thu, 20 Dec 2007 00:23:19 +0000 (00:23 +0000)
committerTom Lane
Thu, 20 Dec 2007 00:23:19 +0000 (00:23 +0000)
print the index key variable or expression for that column.  It was mistakenly
printing ASC/DESC/NULLS FIRST/NULLS LAST decoration too --- and not only for
the target column, but all columns.  Someday we should have an option to
extract that info (and the opclass decoration as well) for a single index
column ... but today is not that day.  Per bug #3829 and subsequent
discussion.

src/backend/utils/adt/ruleutils.c

index 8e4d5c90cd3e76f5bc3f306dc01d249033fc9316..da6ae839820f11d5c08bf3dbd4adf551f31a55dc 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.266 2007/12/01 23:44:44 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.267 2007/12/20 00:23:19 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -769,25 +769,28 @@ pg_get_indexdef_worker(Oid indexrelid, int colno, bool showTblSpc,
            keycoltype = exprType(indexkey);
        }
 
-       /* Add the operator class name */
+       /* Provide decoration only in the colno=0 case */
        if (!colno)
+       {
+           /* Add the operator class name, if not default */
            get_opclass_name(indclass->values[keyno], keycoltype, &buf);
 
-       /* Add options if relevant */
-       if (amrec->amcanorder)
-       {
-           /* if it supports sort ordering, report DESC and NULLS opts */
-           if (opt & INDOPTION_DESC)
-           {
-               appendStringInfo(&buf, " DESC");
-               /* NULLS FIRST is the default in this case */
-               if (!(opt & INDOPTION_NULLS_FIRST))
-                   appendStringInfo(&buf, " NULLS LAST");
-           }
-           else
+           /* Add options if relevant */
+           if (amrec->amcanorder)
            {
-               if (opt & INDOPTION_NULLS_FIRST)
-                   appendStringInfo(&buf, " NULLS FIRST");
+               /* if it supports sort ordering, report DESC and NULLS opts */
+               if (opt & INDOPTION_DESC)
+               {
+                   appendStringInfo(&buf, " DESC");
+                   /* NULLS FIRST is the default in this case */
+                   if (!(opt & INDOPTION_NULLS_FIRST))
+                       appendStringInfo(&buf, " NULLS LAST");
+               }
+               else
+               {
+                   if (opt & INDOPTION_NULLS_FIRST)
+                       appendStringInfo(&buf, " NULLS FIRST");
+               }
            }
        }
    }