Re: pg_restore fails - postgres 7.3.4 - Mailing list pgsql-admin
From | Rob Long |
---|---|
Subject | Re: pg_restore fails - postgres 7.3.4 |
Date | |
Msg-id | 846f5914.5914846f@micropat.com Whole thread Raw |
In response to | pg_restore fails - postgres 7.3.4 ("Rob Long" <rlong@micropat.com>) |
Responses |
Re: pg_restore fails - postgres 7.3.4
|
List | pgsql-admin |
Tom, Will this be fixed in 7.4? Thanks for the support. Rob ----- Original Message ----- From: Tom Lane <tgl@sss.pgh.pa.us> Date: Thursday, October 2, 2003 6:28 pm Subject: Re: [ADMIN] pg_restore fails - postgres 7.3.4 > "Rob Long" <rlong@micropat.com> writes: > >>> Trying to dump and restore a production database with no success. > >>> > >>> pg_restore: [archiver (db)] could not execute query: ERROR: > data type > >>> integer has no default operator class for access method "gist" > >> > >> Hm, this is probably a matter of incorrect object restoration > order ... > >> could we see the output of "pg_restore -l" for this dump file? > > After playing around with this I realize that it's a bug > associated with > schemas --- if you have an operator class that's not in > pg_catalog, the > opclass name has to be explicitly qualified in pg_dump's output, > or it > won't restore correctly. I'm surprised no one reported this before, > since it affects all the contrib operator classes. > > Attached is a patch against 7.3.4, in case it helps. > > regards, tom lane > > Index: src/backend/utils/adt/ruleutils.c =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/utils/adt/ruleutils.c,v retrieving revision 1.124.2.1 diff -c -r1.124.2.1 ruleutils.c *** src/backend/utils/adt/ruleutils.c 8 Jan 2003 22:54:36 -0000 1.124.2.1 --- src/backend/utils/adt/ruleutils.c 2 Oct 2003 22:21:03 -0000 *************** *** 2951,2956 **** --- 2951,2957 ---- Form_pg_opclass opcrec; char *opcname; char *nspname; + bool isvisible; /* Domains use their base type's default opclass */ if (OidIsValid(actual_datatype)) *************** *** 2962,2972 **** 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) { /* Okay, we need the opclass name. Do we need to qualify it? */ opcname = NameStr(opcrec->opcname); ! if (OpclassIsVisible(opclass)) appendStringInfo(buf, " %s", quote_identifier(opcname)); else { --- 2963,2978 ---- if (!HeapTupleIsValid(ht_opc)) elog(ERROR, "cache lookup failed for opclass %u", opclass); opcrec = (Form_pg_opclass) GETSTRUCT(ht_opc); ! ! /* 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 (isvisible) appendStringInfo(buf, " %s", quote_identifier(opcname)); else { ---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend
pgsql-admin by date: