Pulihkan file cadangan postgres menggunakan baris perintah?

294

Saya baru mengenal postgresql, dan secara lokal, saya menggunakan pgadmin3. Di server jarak jauh, bagaimanapun, saya tidak memiliki kemewahan seperti itu.

Saya sudah membuat cadangan database dan menyalinnya, tetapi, apakah ada cara untuk memulihkan cadangan dari baris perintah? Saya hanya melihat hal-hal yang berkaitan dengan GUI atau pg_dumps, jadi, jika seseorang dapat memberi tahu saya bagaimana cara melakukannya, itu akan luar biasa!

TwixxyKit
sumber

Jawaban:

365

Ada dua alat untuk dilihat, tergantung pada bagaimana Anda membuat file dump.

Sumber referensi pertama Anda haruslah halaman manual pg_dump(1)karena itulah yang menciptakan dump itu sendiri. Ia mengatakan:

Dump dapat berupa output dalam format skrip atau arsip file. Script dumps adalah file teks biasa yang berisi perintah SQL yang diperlukan untuk merekonstruksi basis data ke keadaan pada saat disimpan. Untuk memulihkan dari skrip seperti itu, masukkan ke psql (1). File skrip dapat digunakan untuk merekonstruksi database bahkan pada mesin lain dan arsitektur lainnya; dengan beberapa modifikasi bahkan pada produk database SQL lainnya.

Format file arsip alternatif harus digunakan dengan pg_restore (1) untuk membangun kembali database. Mereka mengizinkan pg_restore untuk selektif tentang apa yang dipulihkan, atau bahkan untuk menyusun ulang item sebelum dipulihkan. Format file arsip dirancang agar portabel di seluruh arsitektur.

Jadi tergantung pada cara itu dibuang. Anda mungkin dapat mengetahuinya menggunakan file(1)perintah yang sangat baik - jika itu menyebutkan teks ASCII dan / atau SQL, itu harus dipulihkan dengan cara psqllain Anda mungkin harus menggunakanpg_restore

Memulihkannya cukup mudah:

psql -U username -d dbname < filename.sql

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

atau

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

Lihat halaman manualnya masing-masing - ada beberapa opsi yang memengaruhi cara pengembalian berfungsi. Anda mungkin harus membersihkan database "langsung" Anda atau membuatnya kembali dari templat0 (seperti yang ditunjukkan dalam komentar) sebelum memulihkan, tergantung pada bagaimana dump dibuat.

Steven Schlansker
sumber
3
IME Anda praktis selalu ingin mengembalikan ke database yang baru saja dibuat dari template0. Kalau tidak, jika Anda telah melakukan sesuatu seperti mengaktifkan plpgsql di template1, proses pengembalian akan mencoba melakukannya lagi, dan saklar -1 yang Anda sarankan berarti seluruh transaksi akan gagal. Jadi sesuatu seperti "Createdb -T template0 seo2" diikuti oleh "pg_restore -v -d seo2 seo.pg" untuk mengembalikan seo.pg (dibuat dari database seo) ke dalam database seo2 baru. Jika file cadangan Anda hanya file .sql, Anda dapat memangkas bit yang bertentangan dengan tangan.
araqnid
61
Anda tidak dapat memiliki -ddan -fpada saat yang sama. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner
8
Dalam versi 9.2 opsi "-f" menentukan file output, bukan file dump (dan mungkin artinya sama di versi sebelumnya).
David Resnick
4
Mengenai cannot be used together, lihat di sini: stackoverflow.com/questions/27882070/…
Abdull
3
@ Alex78191 artinya dijalankan sebagai satu transaksi, yang bisa gagal total dan dibatalkan, atau dilalui. Ini akan memblokir beberapa akses ke database juga.
ATN
216

membuat 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 adalah format khusus (dikompresi, dan dapat dilakukan secara paralel dengan -j N) -b termasuk gumpalan, -v adalah verbose, -f adalah nama file cadangan

pulihkan dari cadangan

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

penting untuk mengatur -h localhost - option

pilot
sumber
2
Saya ingin menyebutkan bahwa sebelum Anda menjalankan perintah ini Anda harus berada di folder bin Posgresql . Sebagai contoh di Windows (jika Anda menginstalnya di folder default) itu akan menjadi C: \ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl
90

Anda mungkin harus masuk karena postgresmemiliki hak penuh penuh pada database.

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 

beralih -Ftentukan format file cadangan:

  • c akan menggunakan format PostgreSQL khusus yang dikompresi dan menghasilkan ukuran file cadangan terkecil
  • d untuk direktori di mana setiap file adalah satu tabel
  • t untuk arsip TAR (lebih besar dari format khusus)
  • -h/ --hostMenentukan nama host dari mesin yang menjalankan server
  • -W/ --passwordPaksa pg_dumpuntuk meminta kata sandi sebelum terhubung ke database

pulihkan cadangan:

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

Parameter -Charus membuat database sebelum mengimpor data. Jika tidak berhasil, Anda selalu dapat membuat basis data mis. dengan perintah (sebagai pengguna postgresatau akun lain yang memiliki hak untuk membuat basis data)createdb db_name -O owner

pg_dump / psql

Jika Anda tidak menentukan argumen -Fstandar, digunakan format teks biasa SQL (atau dengan -F p). Maka Anda tidak dapat menggunakan pg_restore. Anda dapat mengimpor data dengan psql.

cadangan:

pg_dump -U username -f backup.sql database_name

mengembalikan:

psql -d database_name -f backup.sql
Tombart
sumber
Saya menggunakan perintah "psql -d database_name -f backup.sql" untuk mengembalikan database yang saya buang dari dokku di DigitalOcean. Bekerja dengan baik.
NineBlindEyes
1
saat menggunakan psql jika pengguna Anda (misalnya postgres) memiliki set kata sandi maka -Wopsi harus digunakan. Untuk misalnya pada Ubuntu tanpa melakukan apa su postgrespun dari terminal $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqladalah perintah yang berfungsi untuk mengembalikan cadangan di localhost saya. Perhatikan bahwa -hopsi diperlukan.
Jignesh Gohel
@JiggneshhGohel Seperti yang tertulis dalam manual: -Wopsi tidak pernah esensial. pg_dumpakan secara otomatis meminta kata sandi jika server meminta otentikasi kata sandi. Anda juga dapat menggunakan PGPASSWORDvariabel env, jika Anda menggunakan kata sandi teks biasa. -hdiperlukan jika standarnya PGHOSTtidak berlaku. Opsi-opsi ini umum untuk banyak util PostgreSQL, jadi tidak penting untuk menjawab pertanyaan ini (sangat tergantung pada pengaturan Anda).
Tombart
@ Sisihkan pg_dump/psqlbagian opsi ke-2 Anda berhasil bagi saya. tapi bagian 1 pg_dump/pg_restoretidak berfungsi untuk memulihkan saya. Terima kasih.
Anjan Biswas
@AnjanBiswas Pilihan pertama adalah menggunakan arsip terkompresi, yang akan membutuhkan lebih banyak CPU tetapi file cadangan akan menempati lebih sedikit ruang pada disk. Anda hanya perlu memilih kompresi yang sesuai misalnya-Fc
Tombart
60

POSTGRESQL 9.1.12

MEMBUANG:

pg_dump -U user db_name > archive_name.sql

masukkan kata sandi pengguna dan tekan enter.

MENGEMBALIKAN:

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

masukkan kata sandi pengguna dan tekan enter.

Natan Medeiros
sumber
31

Di bawah ini adalah versi saya pg_dumpyang saya gunakan untuk memulihkan database:

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

atau gunakan psql:

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

di mana -hhost, -pport, -unama pengguna login, -dnama database

Yahor M
sumber
2
Govind Singh, mengapa Anda mengedit jawaban saya? perubahan Anda tidak membawa hal baru ..
Yahor M
1
my_new_databaseseharusnya sudah ada saat menggunakan psql, bukan?
Elmex80
22

Cadangkan dan pulihkan dengan GZIP

Untuk database ukuran lebih besar, ini sangat bagus

cadangan

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

mengembalikan

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

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

Sarath Ak
sumber
1
Untuk ubuntu Anda dapat menggunakan: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlUntuk mendapatkan izin untuk beroperasi di database. Juga pertimbangkan --cleanbendera saat membuang, yang akan menghapus semua data yang ada, mungkin berguna.
Sebastian
Bekerja solusi hebat dan rapi untuk saya. Terima kasih!
Nam G VU
11
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

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

Ini bekerja untuk saya:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump
Franz
sumber
Terima kasih, ini --no-ownersangat membantu saya.
bonafernando
7

1. buka terminal.

2. backup database Anda dengan perintah berikut

nampan postgres Anda - /opt/PostgreSQL/9.1/bin/

server basis data sumber Anda - 192.168.1.111

lokasi dan nama file cadangan Anda - /home/dinesh/db/mydb.backup

nama db sumber Anda - mydatabase

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

3. kembalikan file mydb.backup ke tujuan.

server tujuan Anda - localhost

nama basis data tujuan Anda - mydatabase

buat database untuk memulihkan cadangan.

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

pulihkan cadangan.

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

Dinesh-SriLanka
sumber
4

Jika Anda membuat cadangan menggunakan pg_dump, Anda dapat dengan mudah mengembalikannya dengan cara berikut:

  1. Buka jendela baris perintah
  2. Pergi ke folder Postgres bin. Sebagai contoh: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Masukkan perintah untuk memulihkan basis data Anda. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Ketikkan kata sandi untuk pengguna postgres Anda
  5. Periksa proses pemulihan

sumber
4

1) Buka terminal psql.

2) Unzip / untar file dump.

3) Buat database kosong.

4) gunakan perintah berikut untuk mengembalikan file .dump

<database_name>-# \i <path_to_.dump_file>
Vaibhav Desai
sumber
4

coba ini:

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

Pulihkan DB psql dari file .sql

Faysal Maqsood
sumber
psql -U <username> -d <dbname> -f <filename> .sql
Faysal Maqsood
3

mencoba:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>
Cristhian Gonzalez
sumber
2

Memulihkan file cadangan postgres tergantung pada bagaimana Anda mengambil cadangan di tempat pertama.

Jika Anda menggunakan pg_dump dengan -F c atau -F d Anda harus menggunakan pg_restore jika tidak, Anda bisa menggunakan

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

9 cara untuk membuat cadangan dan mengembalikan basis data postgres

Prashant Kumar
sumber
Apakah Anda menyadari bahwa Anda melewatkan bagian nama basis data dan itu akan mengeluh tentang basis data tujuan tidak ada?
Pere
2

Cobalah untuk melihat apakah perintah berikut dapat membantu Anda:

sudo su - yourdbuser
psql
\i yourbackupfile
Mehmet Ali
sumber
2

Maaf untuk necropost, tetapi solusi ini tidak berhasil untuk saya. Saya di postgres 10. Di Linux:

  1. Saya harus mengubah direktori ke pg_hba.conf saya.
  2. Saya harus mengedit file untuk mengubah metode dari peer ke md5 seperti yang dinyatakan di sini
  3. Mulai ulang layanan: service postgresql-10 restart
  4. Ubah direktori ke tempat backup.sql saya berada dan jalankan:
    psql postgres -d database_name -1 -f backup.sql

    -database_name adalah nama basis data saya

    -backup.sql adalah nama file cadangan .sql saya.

Tim
sumber
1

Saya mengalami masalah otentikasi yang menjalankan pg_dump, jadi saya memindahkan file dump saya

mv database_dump /tmp

ke direktori temp dan kemudian berlari

su -u postgres
cd /tmp
pg_restore database_dump

Jika Anda memiliki dump database besar, Anda mungkin hanya ingin membuat direktori lain di mana pengguna Anda saat ini dan pengguna postgres dapat mengakses dan memasukkan file dump database ke dalamnya.

pengguna1876508
sumber
1

Jika Anda memiliki file SQL cadangan maka Anda dapat dengan mudah mengembalikannya. Cukup ikuti instruksi, yang diberikan di bawah ini

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 

Ketikkan kata sandi untuk pengguna postgres Anda jika perlu dan biarkan Postgres melakukan tugasnya. Kemudian Anda dapat memeriksa proses pemulihan.

Omar
sumber
0

Jika Anda ingin membuat cadangan data atau memulihkan data dari cadangan, Anda dapat menjalankan perintah berikut:

  1. Untuk membuat cadangan data Anda, pergi ke direktori postgres \ bin \ Anda seperti C:\programfiles\postgres\10\bin\dan kemudian ketik perintah berikut:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Untuk mengembalikan data dari cadangan, buka direktori postgres \ bin \ Anda seperti C:\programfiles\postgres\10\bin\dan kemudian ketik perintah di bawah ini:

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

    Pastikan file cadangan ada.

Girjesh Kumar Suryawanshi
sumber
-3

Lihat di bawah ini contoh kerjanya

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

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

pengguna3881346
sumber