From bea8af915253a56cb7536e30ce72e88968f3b6cb Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 2 Oct 2003 22:24:54 +0000 Subject: [PATCH] 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. --- src/backend/utils/adt/ruleutils.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 {