pg_dump: could not find namespace with OID

Started by D'Arcy J.M. Cainalmost 23 years ago2 messages
#1D'Arcy J.M. Cain
darcy@druid.net
1 attachment(s)

In fact I have fixed my database (source code rocks!) but I thought I would
share my experience with the list in case anyone else sees this. I am
running PostgreSQL 7.3.2 on i386--netbsdelf. I created two user defined
types, glaccount and section. See attached SQL file that creates the type.
Somehow I created two rows for each type in the pg_opclass table, one correct
and one with NULL entries in opcnamespace and opcowner. That's what was
causing the problem I was seeing. I simply removed the bogus rows and
pg_dump worked again.

As far as I can tell there was nothing else affected but if anyone wants me to
test something I still have a copy of the broken database around to try
things on.

Should those fields be NOT NULL to protect against this?

-- 
D'Arcy J.M. Cain <darcy@{druid|vex}.net>   |  Democracy is three wolves
http://www.druid.net/darcy/                |  and a sheep voting on
+1 416 425 1212     (DoD#0082)    (eNTP)   |  what's for dinner.

Attachments:

section.qtext/plain; charset=us-ascii; name=section.qDownload
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: D'Arcy J.M. Cain (#1)
Re: pg_dump: could not find namespace with OID

"D'Arcy J.M. Cain" <darcy@druid.net> writes:

Somehow I created two rows for each type in the pg_opclass table, one
correct and one with NULL entries in opcnamespace and opcowner.
Should those fields be NOT NULL to protect against this?

They are. But 7.3 has a bug that keeps it from enforcing NOT NULL on
certain system catalogs. Did you make the bogus row by means of a
manual INSERT into pg_opclass? If so, you're just seeing that bug.

If you were able to cause CREATE OPERATOR CLASS to make such a broken
entry, I'd be real interested to see how.

regards, tom lane

PS: you'd best take another look at the RESTRICT and JOIN entries for
your operators...