]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
When dumping CREATE INDEX, must show opclass name if the opclass isn't
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 Oct 2003 22:25:08 +0000 (22:25 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 Oct 2003 22:25:08 +0000 (22:25 +0000)
in the schema search path.  Otherwise pg_dump doesn't correctly dump
scenarios where a custom opclass is created in 'public' and then used
by indexes in other schemas.

src/backend/utils/adt/ruleutils.c

index c70e74caab26c1c2459a80a6a9c2815c66a64422..5613ffc40b0a564eb7200b8f17523872410fd8a0 100644 (file)
@@ -3,7 +3,7 @@
  *                             back to source text
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.124.2.1 2003/01/08 22:54:36 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.124.2.2 2003/10/02 22:25:08 tgl Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -2951,6 +2951,7 @@ get_opclass_name(Oid opclass, Oid actual_datatype,
        Form_pg_opclass opcrec;
        char       *opcname;
        char       *nspname;
+       bool            isvisible;
 
        /* Domains use their base type's default opclass */
        if (OidIsValid(actual_datatype))
@@ -2962,11 +2963,16 @@ get_opclass_name(Oid opclass, Oid actual_datatype,
        if (!HeapTupleIsValid(ht_opc))
                elog(ERROR, "cache lookup failed for opclass %u", opclass);
        opcrec = (Form_pg_opclass) GETSTRUCT(ht_opc);
-       if (actual_datatype != opcrec->opcintype || !opcrec->opcdefault)
+
+       /* Must force use of opclass name if not in search path */
+       isvisible = OpclassIsVisible(opclass);
+
+       if (actual_datatype != opcrec->opcintype || !opcrec->opcdefault ||
+               !isvisible)
        {
                /* Okay, we need the opclass name.      Do we need to qualify it? */
                opcname = NameStr(opcrec->opcname);
-               if (OpclassIsVisible(opclass))
+               if (isvisible)
                        appendStringInfo(buf, " %s", quote_identifier(opcname));
                else
                {