Bagaimana cara membuat cadangan satu tabel dalam database postgres?

160

Apakah ada cara untuk membuat cadangan dari satu tabel dalam database menggunakan postgres? Dan bagaimana? Apakah ini juga berfungsi dengan perintah pg_dump?

Elitmiar
sumber

Jawaban:

212

Gunakan --tableuntuk mengetahui pg_dumptabel apa yang harus dicadangkan:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
Frank Heikens
sumber
9
Dan cara mengembalikan file Cadangan itu. (.backup), saya menggunakan pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"tetapi keluar:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares
13
psql -U username -d database -1 -f your_dump.sql
rnaud
5
apa maksudmu: abstract_file_path?
bandungeuy
3
Saya tidak yakin mengapa jawaban ini dipilih, orang mengklik +1 tanpa memeriksa sendiri atau mencoba. Masalah dengan jawaban ini, yang membuatnya sama sekali tidak berguna, adalah bahwa solusi / perintah yang diberikan tidak mengekspor urutan yang dibuat di atas meja (kunci utama), sehingga impor gagal. Saya tidak mengetahui adanya database PG produksi tunggal di mana pun yang tidak menggunakan kunci primer dengan urutan. Itu adalah setengah jawaban, gagal menjawab pertanyaan secara menyeluruh dan membutuhkan pekerjaan tambahan untuk mengekspor / mengimpor satu tabel.
user10664542
1
dengan twist sudo yang sedikit berbeda dengan ini saya berakhir dengan kesalahan izin pada dump file (cukup logis karena postgres pengguna tidak memiliki akses tulis pada direktori saya) dan saya memiliki kesalahan flag yang tidak diketahui untuk --ignore-version. Jawaban Prashant Kumar, yang lebih sederhana, bekerja untuk saya.
JL Peyret
84

Jika Anda berada di Ubuntu,

  1. Masuk ke pengguna postgres Anda sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Pastikan bahwa Anda menjalankan perintah mana postgrespengguna memiliki hak (Contoh: /tmp)

Edit

Jika Anda ingin membuang .sql di komputer lain, Anda mungkin perlu mempertimbangkan untuk melewatkan informasi pemilik yang disimpan ke dalam file .sql.

Kamu bisa memakai pg_dump --no-owner -d <database_name> -t <table_name> > file.sql

Sri Harsha Kappala
sumber
1
Bagaimana jika Anda ingin semua tabel, tanpa harus menentukan nama masing-masing?
shekeine
3
Hapus saja opsi -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala
4
Saya tidak tahu mengapa tetapi opsi -d tidak valid untuk psql9.3 dan perintah yang diberikan tidak bekerja untuk saya. Yang berfungsi adalah pg_dump -U nama pengguna db_name -t table_name> fileName .
serkan kucukbay
pg_dump -t <table_name> <database_name> > file.sql
Sriram
@ user10664542: Silakan baca manual, terutama bagian ini: "Untuk tujuan ini," tabel "termasuk tampilan, tampilan terwujud, urutan, dan tabel asing".
Frank Heikens
42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

Anda dapat mengambil cadangan dari satu tabel tetapi saya akan menyarankan untuk mengambil cadangan dari seluruh database dan kemudian mengembalikan tabel mana saja yang Anda butuhkan. Itu selalu baik untuk memiliki cadangan seluruh database.

9 cara menggunakan pg_dump

Prashant Kumar
sumber
Saya tidak yakin mengapa jawaban ini dipilih, orang mengklik +1 tanpa memeriksa sendiri atau mencoba. Masalah dengan jawaban ini, yang membuatnya sama sekali tidak berguna, adalah bahwa solusi / perintah yang diberikan tidak mengekspor urutan yang dibuat di atas meja (kunci utama), sehingga impor gagal. Saya tidak mengetahui adanya database PG produksi tunggal di mana pun yang tidak menggunakan kunci primer dengan urutan. Itu adalah setengah jawaban, gagal menjawab pertanyaan secara menyeluruh dan membutuhkan pekerjaan tambahan untuk mengekspor / mengimpor satu tabel.
user10664542
seperti disebutkan di atas, saya memiliki kecurigaan yang kuat user10664542, tanpa jawaban postgres SO untuk namanya, keluar dari kedalamannya di sini. sementara urutan memang membawa komplikasi tambahan, cukup upvotes ada pada jawaban yang sama yang mungkin membuat mereka bekerja bahkan jika mereka harus menyesuaikan urutan setelah fakta. seandainya saya harus mengembalikan dump saya, saya akan mencari cara untuk memperbarui id terakhir urutan dari max(id)pada tabel saya. ini adalah jawaban yang berhasil dan saya yakin, melihat sql yang dihasilkan, bahwa saya bisa mengembalikannya.
JL Peyret
9

Jika Anda lebih suka antarmuka pengguna grafis, Anda dapat menggunakan pgAdmin III (Linux / Windows / OS X). Cukup klik kanan pada tabel pilihan Anda, lalu "backup". Ini akan membuat pg_dumpperintah untuk Anda.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Franck Dernoncourt
sumber
2

Sebagai tambahan untuk jawaban Frank Heiken, jika Anda ingin menggunakan INSERTpernyataan alih-alih copy from stdin, maka Anda harus menentukan --insertsbenderanya

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Perhatikan bahwa saya meninggalkan --ignore-versionbenderanya, karena sudah usang.

pengguna3207874
sumber
Saya tidak yakin mengapa jawaban ini dipilih, orang mengklik +1 tanpa memeriksa sendiri atau mencoba. Masalah dengan jawaban ini, yang membuatnya sama sekali tidak berguna, adalah bahwa solusi / perintah yang diberikan tidak mengekspor urutan yang dibuat di atas meja (kunci utama), sehingga impor gagal. Saya tidak mengetahui adanya database PG produksi tunggal di mana pun yang tidak menggunakan kunci primer dengan urutan. Itu adalah setengah jawaban, gagal menjawab pertanyaan secara menyeluruh dan membutuhkan pekerjaan tambahan untuk mengekspor / mengimpor satu tabel.
user10664542