Postgres veritabanında tek bir tablonun yedeği nasıl oluşturulur?


160

Postgres kullanarak bir veritabanında tek bir tablonun yedeğini oluşturmanın bir yolu var mı? Ve nasıl? Bu pg_dump komutuyla da çalışır mı?

Yanıtlar:


212

Hangi tablonun yedekleneceğini --tablesöylemek için kullanın pg_dump:

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

9
Ve bu Yedekleme dosyasını geri yükleme. (.backup), kullandım pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"ama çıktı: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
ne demek istedin: abstract_file_path?
bandungeuy

3
Bu cevabın neden oylandığından emin değilim, insanlar şeyleri kendileri denetlemeden veya denemeden +1'yi tıklatır. Bu cevabı tamamen işe yaramaz hale getiren sorun, verilen çözüm / komutların tabloda (birincil anahtar) oluşturulan dizileri dışa aktarmaması ve böylece içe aktarmanın başarısız olmasıdır. Ben sıralı birincil anahtarları kullanmayan hiçbir yerde tek bir üretim PG veritabanı farkında değilim. Bu yarım bir cevaptır, soruyu tam olarak cevaplayamaz ve tek bir tabloyu dışa / içe aktarmak için ek çalışma gerektirir.
user10664542

1
biraz farklı bir sudo büküm ile dosya dökümü (kullanıcı postgres dizinlerimde yazma erişimi olmadığı için yeterince mantıklı) bir izin hatası ile sona erdi ve için bilinmeyen bir bayrak hatası vardı --ignore-version. Prashant Kumar'ın daha basit olan cevabı benim için çalıştı.
JL Peyret

84

Ubuntu'daysanız,

  1. Postgres kullanıcınıza giriş yapın sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Eğer komutu yürütme emin olun postgreskullanıcı yazma izinlerine sahip (Örneğin: /tmp)

Düzenle

.Sql dosyasını başka bir bilgisayara dökmek istiyorsanız, sahip olan bilgileri .sql dosyasına atlamayı düşünmeniz gerekebilir.

Kullanabilirsiniz pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
Tüm tabloları, her birinin adını belirtmek zorunda kalmadan istiyorsanız?
shekeine

3
Sadece -t seçeneğini kaldırın! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala

4
Neden bilmiyorum ama -d seçeneği psql9.3 için geçerli değil ve verilen komut benim için çalışmıyor. Bunlardan biri pg_dump -U kullanıcı adı db_name -t table_name> dosyaAdı'dır .
serkan kucukbay

pg_dump -t <table_name> <database_name> > file.sql
Sriram

@ user10664542: Lütfen kılavuzu, özellikle bu bölümü okuyun: "Bu amaçla," tablo "görünümleri, somutlaştırılmış görünümleri, sekansları ve yabancı tabloları içerir".
Frank Heikens

42

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

Tek bir tablonun yedeğini alabilirsiniz, ancak tüm veritabanının yedeğini almanızı ve ardından hangi tabloya ihtiyacınız olduğunu geri yüklemenizi öneririm. Tüm veritabanının yedeğini almak her zaman iyidir.

Pg_dump kullanmanın 9 yolu


Bu cevabın neden oylandığından emin değilim, insanlar şeyleri kendileri incelemeden veya denemeden + 1'i tıklatır. Bu cevabı tamamen işe yaramaz hale getiren sorun, verilen çözüm / komutların tabloda (birincil anahtar) oluşturulan dizileri dışa aktarmaması ve böylece içe aktarmanın başarısız olmasıdır. Ben sıralı birincil anahtarlar kullanmayan hiçbir yerde tek bir üretim PG veritabanı farkında değilim. Bu yarım bir cevaptır, soruyu tam olarak cevaplayamaz ve tek bir tabloyu dışa / içe aktarmak için ek çalışma gerektirir.
user10664542

Yukarıda belirtildiği gibi, adına herhangi bir SO postgres cevabı olmadan güçlü bir şüphe kullanıcı10664542 var, burada derinliği dışında. sekans ek komplikasyonlar getirse de, olaydan sonra sekansı ayarlamak zorunda olsalar bile muhtemelen halkın onları çalıştırmasını sağlayan benzer cevaplar üzerinde yeterince upvotes vardır. dökümü geri yüklemek zorunda olsaydım, sekansın son kimliğini masamdaki birinden güncellemenin yollarını max(id)arayabilirdim. Bu işe yarayan cevaptır ve üretilen sql'a baktığımda geri yükleyebileceğime inanıyorum.
JL Peyret

9

Bir grafik kullanıcı arabirimi tercih ediyorsanız pgAdmin III'ü (Linux / Windows / OS X) kullanabilirsiniz. İstediğiniz tabloya sağ tıklayın, ardından "yedekleyin". pg_dumpSizin için bir komut yaratacaktır .

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


2

Frank Heiken'in cevabına ek olarak, INSERTbunun yerine ifadeleri kullanmak copy from stdinistiyorsanız, --insertsbayrağı belirtmelisiniz

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

--ignore-versionBayrağı terk ettiğime dikkat edin , çünkü kullanımdan kaldırılmıştır.


Bu cevabın neden oylandığından emin değilim, insanlar şeyleri kendileri incelemeden veya denemeden + 1'i tıklatır. Bu cevabı tamamen işe yaramaz hale getiren sorun, verilen çözüm / komutların tabloda (birincil anahtar) oluşturulan dizileri dışa aktarmaması ve böylece içe aktarmanın başarısız olmasıdır. Ben sıralı birincil anahtarlar kullanmayan hiçbir yerde tek bir üretim PG veritabanı farkında değilim. Bu yarım bir cevaptır, soruyu tam olarak cevaplayamaz ve tek bir tabloyu dışa / içe aktarmak için ek çalışma gerektirir.
user10664542
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.