From: Tom Lane Date: Thu, 2 Oct 2003 22:24:54 +0000 (+0000) Subject: When dumping CREATE INDEX, must show opclass name if the opclass isn't X-Git-Tag: REL7_4_BETA4~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bea8af915253a56cb7536e30ce72e88968f3b6cb;p=postgresql When dumping CREATE INDEX, must show opclass name if the opclass isn't 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. --- diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index ccf05a14e3..0b13dcd035 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3,7 +3,7 @@ * back to source text * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.155 2003/09/29 18:55:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.156 2003/10/02 22:24:54 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -4030,6 +4030,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)) @@ -4049,12 +4050,16 @@ get_opclass_name(Oid opclass, Oid actual_datatype, OidIsValid(get_element_type(actual_datatype))) actual_datatype = opcrec->opcintype; } + + /* Must force use of opclass name if not in search path */ + isvisible = OpclassIsVisible(opclass); - if (actual_datatype != opcrec->opcintype || !opcrec->opcdefault) + 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 {