girdi dosyası bir metin biçimi dökümü olarak görünüyor. Lütfen psql kullanın


95

Kullanarak yedek alıyorum

pg_dump db_production > postgres_db.dump

ve sonra scp kullanarak localhost'a kopyalıyorum.

Şimdi yerel veritabanıma içe aktardığımda bir hata veriyor

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

commad line kullanarak

pg_restore -d db_development postgres_db.dump

Yanıtlar:


138

Gönderen pg_dumpbelgeler:

Örnekler

Mydb adlı bir veritabanını bir SQL komut dosyasına dökmek için :

$ pg_dump mydb > db.sql

Böyle bir komut dosyasını newdb adlı (yeni oluşturulmuş) bir veritabanına yeniden yüklemek için :

$ psql -d newdb -f db.sql

Bir veritabanını özel biçimli bir arşiv dosyasına dökmek için:

$ pg_dump -Fc mydb > db.dump

Bir veritabanını dizin biçimli bir arşive dökmek için:

$ pg_dump -Fd mydb -f dumpdir

Bir arşiv dosyasını newdb adlı (yeni oluşturulmuş) bir veritabanına yeniden yüklemek için:

$ pg_restore -d newdb db.dump

Gönderen pg_restorebelgeler:

Örnekler

Mydb adlı bir veritabanını özel biçimli bir döküm dosyasına döktüğümüzü varsayalım:

$ pg_dump -Fc mydb > db.dump

Veritabanını bırakmak ve dökümden yeniden oluşturmak için:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump

2
pg_restore yaptığımda, pg_restore: [arşivleyici] girdi dosyası bir metin biçimi dökümü olarak görünüyor. Lütfen psql kullanın.
Haseeb Ahmad

DB'yi geri yüklemek için hangisini kullanıyorum?
Haseeb Ahmad

76
bu soruya cevap vermiyor
dopatraman

1
bir metin dosyasından geri yüklemenin bir yolu için serverfault.com/questions/260607/…
chrs

7
IMO Bu yazı, cevabı gizleyen biraz fazla ayrıntıya sahip. Yazarın işaret edemediği şey, '-F' parametresi için pg_dump belgelerinin, varsayılan biçimin ('p' / 'düz') pg_restore için uygun olduğunu söylememesidir. pg_restore, pg_dump'ın 'c', 'd' veya 't' biçimleriyle kullanılmasını gerektirir.
Matt

63

Yukarıdaki cevap benim için işe yaramadı, bu işe yaradı:

psql db_development < postgres_db.dump


Kısa ve güzel. Benim için de çalıştı.
Öğrenci

14

Kullandığım uzak ana bilgisayardan geri yüklemeyi denediğimde benim için

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

iyi çalıştı. Ve uzak değilse, sadece aşağıdaki komutu çalıştı.

psql -d database < db.dump

9

Kullanarak pg_dumpuyumlu bir yedekleme oluşturmak için, dökümünüzü oluştururken / pg_restorekullanmalısınız .--format=custom-Fc

Dokümanlardan:

Pg_restore'a giriş için uygun özel formatlı bir arşiv çıktılar.

Yani pg_dumpkomutunuz şöyle görünebilir:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

Ve pg_restoreemriniz:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump

6

Benim için bunun gibi çalışıyor. C: \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d kukla -f C: \ Kullanıcılar \ Karşıdan Yüklemeler \ d2cm_test.sql


2
Basit ve faydalı cevap!
Rax Weber

1
Teşekkür ederim @RAJNISH YADAV.
Amit

1

düz metin biçiminde yedeklemek için -Fp ile pg_dump kullanırsanız, aşağıdaki komutu kullanın:

cat db.txt | psql dbname

tüm verileri veritabanınıza dbname adıyla kopyalamak için


0

Tam bir DB dökümünüz varsa:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Bununla birlikte, ayrı tutulan şemalarınız varsa, bu işe yaramaz. Ardından, benzer şekilde veri ekleme için tetikleyicileri devre dışı bırakmanız gerekir pg_restore --disable-triggers. Daha sonra bunu kullanabilirsiniz:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Bir yan not olarak, postgreslerin çok talihsiz bir dezavantajı olduğunu düşünüyorum. Bir döküm oluşturmanın varsayılan yolu pg_dumpile uyumsuzdur pg_restore. Bununla birlikte, bazı ek anahtarlarla birlikte. O NE LAN?

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.