Reputation: 313
commands:
bin/pg_dump -b -o -Fc -Z 0 -p 5333 -U user template1 -f db.dump
bin/pg_restore -c -h localhost -p 5333 -U user -d template1 db.dump
steps followed:
add new tables to DB and took dump
delete the newly added tables
try restore with dump file
restore exited with code 1 but still tables are restore successfully.
error in pg_restore:
pg_restore: [archiver (db)] could not execute query: err-1: table "test1" does not exist
Command was: DROP TABLE public.test1;
WARNING: errors ignored on restore: 2
Is this the expected behavior for dump/restore feature with tables add/delete steps?
Upvotes: 16
Views: 4737
Reputation: 6723
Yes, you are instructing pg_restore to drop objects before creating them, but those objects don't exist anymore. The docs explain this for the -c option:
Before restoring database objects, issue commands to DROP all the objects that will be restored. This option is useful for overwriting an existing database. If any of the objects do not exist in the destination database, ignorable error messages will be reported, unless --if-exists is also specified.
Upvotes: 1
Reputation: 2454
Using pg_restore
can be a pain in the neck if the tables of your target DB only partially overlap with the tables in the dump.
Using the --clean
flag only partially solves the problem but you may still encounter errors for non-existing tables.
In my opinion your best shot is to delete your target DB (or delete-cascade the target schema) and go with the restore.
A similar question you may want to look at: will pg_restore overwrite the existing tables?
Upvotes: 0