Thread: Non existent user error on restore

Non existent user error on restore

From
Werner Bohl
Date:
I'm using Postgresql 7.4.2 on RedHat 9. We backup a database weekly with
the following command:

pg_dump --clean --create  --verbose --format=c \
   --compress 9 -U admin $DBSID \
    | dbdumpsplit $DBSID.dump

where $DBSID is the database name. The database is very large, so we
split the dump in 1GB chunks.

Created a new database to hold a copy of the backup. Then issued
  cat $DBSID.dump* | pg_restore -d NEW_DB
This errs with following message:
pg_restore: [archiver (db)] could not execute query: ERROR: user "100"
does not exist

Issuing a \du does not list a user with name or id 100 on the backed-up
database. Created a user with:
  createuser -i 100 dropme
Run the restore again, but gave same error!

Tried to drop the user:
  dropuser dropme
and it returned an error saying that user dropme owned a database and
could not be dropped.

Please help me cause I'm really baffled with this odd behavior.

--
Werner Bohl <wbohl@deepdata.com>
Infutor de Costa Rica


Re: Non existent user error on restore

From
Tom Lane
Date:
Werner Bohl <wbohl@deepdata.com> writes:
> pg_restore: [archiver (db)] could not execute query: ERROR: user "100"
> does not exist

I'd suggest doing a plain text schema-only dump (pg_dump -s) and looking
through it for references to userid 100.  You have presumably got some
objects in the database that are owned by a now-gone user.  Fixing their
ownership would be the best long-term solution.

> Created a user with:
>   createuser -i 100 dropme
> Run the restore again, but gave same error!

I think you'd actually need "createuser 100", ie, the name not the sysid
is what's being complained of above.  It might be prudent to give it
sysid 100 as well, though.

            regards, tom lane