Restore a postgres backup file using the command line?

PostgresqlCommand LineBackupRestore

Postgresql Problem Overview


I'm new to postgresql, and locally, I use pgadmin3. On the remote server, however, I have no such luxury.

I've already created the backup of the database and copied it over, but, is there a way to restore a backup from the command line? I only see things related to GUI or to pg_dumps, so, if someone can tell me how to go about this, that'd be terrific!

Postgresql Solutions


Solution 1 - Postgresql

There are two tools to look at, depending on how you created the dump file.

Your first source of reference should be the man page pg_dump(1) as that is what creates the dump itself. It says:

> Dumps can be output in script or > archive file formats. Script dumps are > plain-text files containing the SQL > commands required to reconstruct > the database to the state it was > in at the time it was saved. To > restore from such a script, feed it to > psql(1). Script files can be used > to reconstruct the database even > on other machines and other > architectures; with some modifications > even on other SQL database products. > > The alternative archive file formats > must be used with pg_restore(1) to > rebuild the database. They allow > pg_restore to be selective about what > is restored, or even to reorder the > items prior to being restored. The > archive file formats are designed to > be portable across architectures.

So depends on the way it was dumped out. You can probably figure it out using the excellent file(1) command - if it mentions ASCII text and/or SQL, it should be restored with psql otherwise you should probably use pg_restore

Restoring is pretty easy:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

or

pg_restore -U username -d dbname -1 filename.dump

Check out their respective manpages - there's quite a few options that affect how the restore works. You may have to clean out your "live" databases or recreate them from template0 (as pointed out in a comment) before restoring, depending on how the dumps were generated.

Solution 2 - Postgresql

create backup

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c is custom format (compressed, and able to do in parallel with -j N) -b is including blobs, -v is verbose, -f is the backup file name

restore from backup

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

important to set -h localhost - option

Solution 3 - Postgresql

You might need to be logged in as postgres in order to have full privileges on databases.

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump/pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

switch -F specify format of backup file:

  • c will use custom PostgreSQL format which is compressed and results in smallest backup file size
  • d for directory where each file is one table
  • t for TAR archive (bigger than custom format)
  • -h/--host Specifies the host name of the machine on which the server is running
  • -W/--password Force pg_dump to prompt for a password before connecting to a database

restore backup:

   pg_restore -d database_name -U username -C backup.dump

Parameter -C should create database before importing data. If it doesn't work you can always create database eg. with command (as user postgres or other account that has rights to create databases) createdb db_name -O owner

pg_dump/psql

In case that you didn't specify the argument -F default plain text SQL format was used (or with -F p). Then you can't use pg_restore. You can import data with psql.

backup:

pg_dump -U username -f backup.sql database_name

restore:

psql -d database_name -f backup.sql

Solution 4 - Postgresql

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

put the user password and press enter.

RESTORE:

psql -U user db_name < /directory/archive.sql

put the user password and press enter.

Solution 5 - Postgresql

Below is my version of pg_dump which I use to restore the database:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

or use psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

where -h host, -p port, -u login username, -d name of database

Solution 6 - Postgresql

Backup and restore with GZIP

> For larger size database this is very good

backup

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

restore

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/14/backup-dump.html

Solution 7 - Postgresql

This worked for me:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump

Solution 8 - Postgresql

Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}

Solution 9 - Postgresql

try this:

psql -U <username> -d <dbname> -f <filename>.sql

Restore DB psql from .sql file

Solution 10 - Postgresql

1. Open the Terminal.

2. Backup your database with following command

your postgres bin -> /opt/PostgreSQL/9.1/bin/

your source database server -> 192.168.1.111

your backup file location and name -> /home/dinesh/db/mydb.backup

your source db name -> mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password  --format custom --blobs --file "/home/dinesh/db/mydb.backup" "mydatabase"

3. Restore mydb.backup file into destination.

your destination server -> localhost

your destination database name -> mydatabase

Create database for restore the backup.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREATE DATABASE mydatabase"

Restore the backup.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db/mydb.backup"

Solution 11 - Postgresql

If you create a backup using pg_dump you can easily restore it in the following way:

  1. Open command line window
  2. Go to Postgres bin folder. For example: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Enter the command to restore your database. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup<backup-file-name>.sql
  4. Type password for your postgres user
  5. Check the restore process

Solution 12 - Postgresql

I didnt see here mentions about dump file extension (*.dump).

This solution worked for me:

I got a dump file and needed to recover it.

First I tried to do this with pg_restore and got:

pg_restore: error: input file appears to be a text format dump. Please use psql.

I did it with psql and worked well:

psql -U myUser -d myDataBase < path_to_the_file/file.dump

Solution 13 - Postgresql

  1. Open psql terminal.

  2. Unzip/ untar the dump file.

  3. Create an empty database.

  4. use the following command to restore the .dump file

    -# \i

Solution 14 - Postgresql

Backup & Restore

This is the combo I'm using to backup, drop, create and restore my database (on macOS and Linux):

sudo -u postgres pg_dump -Fc mydb > ./mydb.sql
sudo -u postgres dropdb mydb
sudo -u postgres createdb -O db_user mydb
sudo -u postgres pg_restore -d mydb < ./mydb.sql
Misc
  • -Fc will compress the database (format custom)
  • List PostgreSQL users: sudo -u postgres psql -c "\du+"
  • You may want to add hostname and date to ./mydb.sql, then change it by:
    ./`hostname`_mydb_`date +"%Y%m%d_%H%M"`.sql
    

Solution 15 - Postgresql

try:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>

Solution 16 - Postgresql

To restore a dump file

psql -d [Dbname] -U [UserName] -p 5432 < [FileLocation]

To restore a .SQL file

pg_restore -U [Username] -d [Dbname] -1 [FileLocation]

If you get user authentication errors, go to the file pg_hba.conf which is in PSQL/data folder in your program files, and change the "METHOD" to "Trust". Restart you psql serive in windows services(Win + R --> services.msc).

Solution 17 - Postgresql

Restoring a postgres backup file depends on how did you take the backup in the first place.

If you used pg_dump with -F c or -F d you need to use pg_restore otherwise you can just use

> psql -h localhost -p 5432 -U postgres < backupfile

9 ways to backup and restore postgres databases

Solution 18 - Postgresql

As below link said, you can use psql command for restoring the dump file:

https://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE

psql dbname < infile

if you need to set username just add the username after the command like:

psql dbname < infile username

Solution 19 - Postgresql

Try to see if the following commands can help you:

sudo su - yourdbuser
psql
\i yourbackupfile

Solution 20 - Postgresql

Sorry for the necropost, but these solutions did not work for me. I'm on postgres 10. On Linux:

  1. I had to change directory to my pg_hba.conf.
  2. I had to edit the file to change method from peer to md5 as stated here
  3. Restart the service: service postgresql-10 restart
  4. Change directory to where my backup.sql was located and execute:
    psql postgres -d database_name -1 -f backup.sql

-database_name is the name of my database

-backup.sql is the name of my .sql backup file.

Solution 21 - Postgresql

The shortest way with no password prompt

psql "postgresql://<db_user>:<db_pass>@<ip>:<port>/<db_name>" < "backup.sql"

If you are using Windows OS

psql.exe "postgresql://<db_user>:<db_pass>@<ip>:<port>/<db_name>" < "backup.sql"

Solution 22 - Postgresql

I was having authentication problems running pg_dump, so I moved my dump file

mv database_dump /tmp

into the temp directory and then ran

su -u postgres
cd /tmp
pg_restore database_dump

If you have a large database dump, you may just want to create another directory where your current user and the postgres user can access and putting the database dump file into that.

Solution 23 - Postgresql

If you have a backup SQL file then you can easily Restore it. Just follow the instructions, given in the below

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

Type password for your postgres user if needed and let Postgres to do its work. Then you can check the restore process.

Solution 24 - Postgresql

Backup==>

Option1: To take backup along with password in cmd
1.PGPASSWORD="mypassword" pg_dump -U postgres -h localhost --inserts mydb>mydb.sql
Option2: To take backup without password in cmd
2. pg_dump -U postgres -h localhost --inserts mydb>mydb.sql
Option3: To take backup as gzip(if database is huge)
3. pg_dump -U postgres -h localhost mydb --inserts | gzip > mydb.gz

Restore:
1. psql -h localhost -d mydb -U postgres -p 5432 < mydb.sql

Solution 25 - Postgresql

This solution only works for Windows.

First, ensure you have already added the postgres bin folder to the "Path" environment variable (in my case this folder is C:\Program Files\PostgreSQL\12\bin).

Then, open the Windows command interpreter (cmd), go to the folder where you have the .sql file and execute this command:

pg_restore -U userName -d database-1 backupfile.sql

For example:

pg_restore -U sam -d SamDataBase -1 SamDataBaseBackup.sql

(It can ask you for the password of the user so ensure to type it correctly and then click enter)

Pura vida!

Solution 26 - Postgresql

If you have created a new database named mydb, To restore a .sql dump to that database with psql,

psql --file=dump.sql --username=postgres --host=localhost --port=5432 mydb

the password will be prompted by psql

The connection options are

  -h, --host=HOSTNAME      database server host or socket directory (default: "/var/run/postgresql")
  -p, --port=PORT          database server port (default: "5432")
  -U, --username=USERNAME  database user name (default: "xyz")
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)

Solution 27 - Postgresql

If you want to backup your data or restore data from a backup, you can run the following commands:

  1. To create backup of your data, go to your postgres \bin\ directory like C:\programfiles\postgres\10\bin\ and then type the following command:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
    
  2. To restore data from a backup, go to your postgres \bin\ directory like C:\programfiles\postgres\10\bin\ and then type below command:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup
    

    Please make sure that the backup file exists.

Solution 28 - Postgresql

Follow these 3 steps :

> 1. start postgres server - sudo systemctl start postgresql > 2. enable same - sudo systemctl enable postgresql > 3. restore command - pg_restore -h localhost -p 5432 -U postgres -d old_db

assuming that the dump is there in the same directory

Links :

> https://www.postgresqltutorial.com/postgresql-restore-database > https://askubuntu.com/questions/50621/cannot-connect-to-postgresql-on-port-5432

Solution 29 - Postgresql

See below example its working

C:/Program Files/PostgreSQL/9.4/bin\pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "newDatabase" --no-password --verbose

"C:\Users\Yogesh\Downloads\new Download\DB.backup"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTwixxyKitView Question on Stackoverflow
Solution 1 - PostgresqlSteven SchlanskerView Answer on Stackoverflow
Solution 2 - PostgresqlAlex DeemannView Answer on Stackoverflow
Solution 3 - PostgresqlTombartView Answer on Stackoverflow
Solution 4 - PostgresqlNatan MedeirosView Answer on Stackoverflow
Solution 5 - PostgresqlYahor MView Answer on Stackoverflow
Solution 6 - PostgresqlSarath AkView Answer on Stackoverflow
Solution 7 - PostgresqlFrancescoView Answer on Stackoverflow
Solution 8 - PostgresqlAaron LelevierView Answer on Stackoverflow
Solution 9 - PostgresqlFaysal MaqsoodView Answer on Stackoverflow
Solution 10 - PostgresqlDinesh AppuhamiView Answer on Stackoverflow
Solution 11 - Postgresqluser6155322View Answer on Stackoverflow
Solution 12 - PostgresqlIgr PnView Answer on Stackoverflow
Solution 13 - PostgresqlVaibhav DesaiView Answer on Stackoverflow
Solution 14 - PostgresqlDevonDahonView Answer on Stackoverflow
Solution 15 - PostgresqlCristhian GonzalezView Answer on Stackoverflow
Solution 16 - PostgresqlHarrish SelvarajahView Answer on Stackoverflow
Solution 17 - PostgresqlPrashant KumarView Answer on Stackoverflow
Solution 18 - PostgresqlMaryam SaeidiView Answer on Stackoverflow
Solution 19 - PostgresqlDr. Mehmet Ali ATICIView Answer on Stackoverflow
Solution 20 - PostgresqlTimView Answer on Stackoverflow
Solution 21 - PostgresqlMasih JahangiriView Answer on Stackoverflow
Solution 22 - Postgresqluser1876508View Answer on Stackoverflow
Solution 23 - PostgresqlOmarView Answer on Stackoverflow
Solution 24 - PostgresqlRamesh PonnusamyView Answer on Stackoverflow
Solution 25 - PostgresqlJohnny ChaconView Answer on Stackoverflow
Solution 26 - PostgresqlAll Іѕ VаиітyView Answer on Stackoverflow
Solution 27 - PostgresqlGirjesh Kumar SuryawanshiView Answer on Stackoverflow
Solution 28 - PostgresqlSutirtha RejView Answer on Stackoverflow
Solution 29 - Postgresqluser3881346View Answer on Stackoverflow