Reputation: 803
How can I restore one table from database dump ? I make dump using the next command:
pg_dump -U admin -h localhost my-db-name | gzip - > /home/a2_db_backup/my-db-name-backup.sql.gz
Upvotes: 13
Views: 31127
Reputation: 7307
There is no easy way, except for some hacks (like using awk to cut the part of the file).
If the dump is not too big, the easiest thing to do is restore the full backup to a temporary database (gzcat backup_file.gz | psql -h host -U user database_name
) dump the one table (pg_dump -t my_table
), then restore it.
For future reference, the custom and directory pg_dump
formats do allow restoring a single table. Use either of the following commands to create dumps:
pg_dump -Fc database_name > database.dump
or
pg_dump -Fd database_name -f database.dump
-Fd
produces a directory, but this doesn't affect the pg_restore
command; just use the same name that you specified for the dump output. See pg_dump
man page for the details - especially the examples at the end.
Then you can use pg_restore
to restore a single table:
pg_restore -t my_table -d database_name database.dump
Upvotes: 24
Reputation: 2972
As suggested in the accepted answer, you could use awk to cut the file like so:
awk '/COPY public.<tablename>/,/\\./' dump_file.sql > restore_table.sql
and then restore using psql:
psql [...] < restore_table.sql
Obviously, this only works if the table has been truncated and not dropped.
Upvotes: 3