Thread: Schema with OID 0 does not exist in pg_dump

Schema with OID 0 does not exist in pg_dump

From
Lukasz Brodziak
Date:
Hi,

When I try to make a dump of a database I get the error pg_dump: schema with OID 0 does not exist. How can I find the schema with this OID? pg_namespace has no info on this.

--
Łukasz Brodziak
"Do you bury me when I'm gone
Do you teach me while I'm here
Just as soon I belong
Then it's time I disappear"

Re: Schema with OID 0 does not exist in pg_dump

From
Tom Lane
Date:
Lukasz Brodziak <lukasz.brodziak@gmail.com> writes:
> When I try to make a dump of a database I get the error pg_dump: schema with
> OID 0 does not exist. How can I find the schema with this OID?

Well, you can't, because it doesn't exist ;-).  What you need to find
out is what is trying to reference it.  I'd start by looking for a zero
in one of the catalog columns that reference pg_namespace.oid, such as
pg_class.relnamespace.

            regards, tom lane

Re: Schema with OID 0 does not exist in pg_dump

From
Lukasz Brodziak
Date:
Ok, I've found the rows theyh were placed in pg_operator table. After deletion I get the following error in pg_dump:
pg_dump: Error message from server: ERROR:  operator is not unique: smallint <> integer
LINE 1: ...d = relowner) AS rolname, relchecks, (reltriggers <> 0) AS r...
                                                             ^
HINT:  Could not choose a best candidate operator. You may need to add explicit type casts.
pg_dump: The command was: SELECT c.tableoid, c.oid, relname, relacl, relkind, relnamespace, (SELECT rolname FROM pg_catalog.pg_roles WHERE oid = relowner) AS rolname, relchecks, (reltriggers <> 0) AS relhastriggers, relhasindex, relhasrules, relhasoids, relfrozenxid, NULL AS reloftype, d.refobjid AS owning_tab, d.refobjsubid AS owning_col, (SELECT spcname FROM pg_tablespace t WHERE t.oid = c.reltablespace) AS reltablespace, array_to_string(c.reloptions, ', ') AS reloptions, NULL AS toast_reloptions FROM pg_class c LEFT JOIN pg_depend d ON (c.relkind = 'S' AND d.classid = c.tableoid AND d.objid = c.oid AND d.objsubid = 0 AND d.refclassid = c.tableoid AND d.deptype = 'a') WHERE relkind in ('r', 'S', 'v', 'c') ORDER BY c.oid
pg_dump: *** aborted because of error


2011/9/1 Tom Lane <tgl@sss.pgh.pa.us>
Lukasz Brodziak <lukasz.brodziak@gmail.com> writes:
> When I try to make a dump of a database I get the error pg_dump: schema with
> OID 0 does not exist. How can I find the schema with this OID?

Well, you can't, because it doesn't exist ;-).  What you need to find
out is what is trying to reference it.  I'd start by looking for a zero
in one of the catalog columns that reference pg_namespace.oid, such as
pg_class.relnamespace.

                       regards, tom lane



--
Łukasz Brodziak
"Do you bury me when I'm gone
Do you teach me while I'm here
Just as soon I belong
Then it's time I disappear"

Re: Schema with OID 0 does not exist in pg_dump

From
Tom Lane
Date:
Lukasz Brodziak <lukasz.brodziak@gmail.com> writes:
> Ok, I've found the rows theyh were placed in pg_operator table. After
> deletion I get the following error in pg_dump:
> pg_dump: Error message from server: ERROR:  operator is not unique: smallint
> <> integer
> LINE 1: ...d = relowner) AS rolname, relchecks, (reltriggers <> 0) AS r...
>                                                              ^
> HINT:  Could not choose a best candidate operator. You may need to add
> explicit type casts.

Kinda looks like you deleted some rows you shouldn't have ... the above
is about what I'd expect to happen if you'd removed the int2 <> int4
operator.  Do you know what you removed, exactly?  You might try
comparing the contents of pg_operator with another, non-broken database,
and putting back whatever's missing.

            regards, tom lane

Re: Schema with OID 0 does not exist in pg_dump

From
Lukasz Brodziak
Date:
Hi,

Just managed to complete the pg_dump by replacing the broken pg_operator file with the one from non-broken database then I read what You've written. Now I can go further with the DB :-) Thanks a lot for the guidelines Tom.

Regards
Luke
2011/9/5 Tom Lane <tgl@sss.pgh.pa.us>
Lukasz Brodziak <lukasz.brodziak@gmail.com> writes:
> Ok, I've found the rows theyh were placed in pg_operator table. After
> deletion I get the following error in pg_dump:
> pg_dump: Error message from server: ERROR:  operator is not unique: smallint
> <> integer
> LINE 1: ...d = relowner) AS rolname, relchecks, (reltriggers <> 0) AS r...
>                                                              ^
> HINT:  Could not choose a best candidate operator. You may need to add
> explicit type casts.

Kinda looks like you deleted some rows you shouldn't have ... the above
is about what I'd expect to happen if you'd removed the int2 <> int4
operator.  Do you know what you removed, exactly?  You might try
comparing the contents of pg_operator with another, non-broken database,
and putting back whatever's missing.

                       regards, tom lane



--
Łukasz Brodziak
"Do you bury me when I'm gone
Do you teach me while I'm here
Just as soon I belong
Then it's time I disappear"