Skip to content
Snippets Groups Projects
Commit bea8af91 authored by Tom Lane's avatar Tom Lane
Browse files

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.
parent b4966453
No related branches found
No related tags found
No related merge requests found
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* back to source text * back to source text
* *
* IDENTIFICATION * 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. * This software is copyrighted by Jan Wieck - Hamburg.
* *
...@@ -4030,6 +4030,7 @@ get_opclass_name(Oid opclass, Oid actual_datatype, ...@@ -4030,6 +4030,7 @@ get_opclass_name(Oid opclass, Oid actual_datatype,
Form_pg_opclass opcrec; Form_pg_opclass opcrec;
char *opcname; char *opcname;
char *nspname; char *nspname;
bool isvisible;
/* Domains use their base type's default opclass */ /* Domains use their base type's default opclass */
if (OidIsValid(actual_datatype)) if (OidIsValid(actual_datatype))
...@@ -4050,11 +4051,15 @@ get_opclass_name(Oid opclass, Oid actual_datatype, ...@@ -4050,11 +4051,15 @@ get_opclass_name(Oid opclass, Oid actual_datatype,
actual_datatype = opcrec->opcintype; actual_datatype = opcrec->opcintype;
} }
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? */ /* Okay, we need the opclass name. Do we need to qualify it? */
opcname = NameStr(opcrec->opcname); opcname = NameStr(opcrec->opcname);
if (OpclassIsVisible(opclass)) if (isvisible)
appendStringInfo(buf, " %s", quote_identifier(opcname)); appendStringInfo(buf, " %s", quote_identifier(opcname));
else else
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment