pg_dump: could not find namespace with OID
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:
"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...