Show:
Backup and Restore a PostgreSQL Database
While working on different projects and in different environments, we often need to export a dump from one database and then import it into another. A while ago we wrote how to export and import a mySQL dump, and here is a guide how to backup and restore a PostgreSQL database.
Export a PostgreSQL database dump
To export PostgreSQL database we will need to use the pg_dump tool, which will dump all the contents of a selected database into a single file.
We need to run pg_dump in the command line on the computer where the database is stored. So, if the database is stored on a remote server, you will need to SSH to that server in order to run the following command:
pg_dump -U db_user -W -F t db_name > /path/to/your/file/dump_name.tar
Here we used the following options:
-Uto specify which user will connect to the PostgreSQL database server.-Wor--passwordwill force pg_dump to prompt for a password before connecting to the server.-Fis used to specify the format of the output file, which can be one of the following:-
p– plain-text SQL scriptc– custom-format archived– directory-format archivet– tar-format archive
custom, directory and tar formats are suitable for input into pg_restore.
To see a list of all the available options use pg_dump -?.
With given options pg_dump will first prompt for a password for the database user db_user and then connect as that user to the database named db_name. After it successfully connects, > will write the output produced by pg_dump to a file with a given name, in this case dump_name.tar.
File created in this process contains all the SQL queries that are required in order to replicate your database.
Import a PostgreSQL database dump
There are two ways to restore a PostgreSQL database:
psqlfor restoring from a plain SQL script file created withpg_dump,pg_restorefor restoring from a .tar file, directory, or custom format created withpg_dump.
1. Restore a database with psql
If your backup is a plain-text file containing SQL script, then you can restore your database by using PostgreSQL interactive terminal, and running the following command:
psql -U db_user db_name < dump_name.sql
where db_user is the database user, db_name is the database name, and dump_name.sql is the name of your backup file.
2. Restore a database with pg_restore
If you choose custom, directory, or archive format when creating a backup file, then you will need to use pg_restore in order to restore your database:
pg_restore -d db_name /path/to/your/file/dump_name.tar -c -U db_user
If you use pg_restore you have various options available, for example:
-cto drop database objects before recreating them,-Cto create a database before restoring into it,-eexit if an error has encountered,-F formatto specify the format of the archive.
Use pg_restore -? to get the full list of available options.
You can find more info on using mentioned tools by running man pg_dump, man psql and man pg_restore.