pg_dump ve pg_restore: giriş dosyası geçerli bir arşiv olarak görünmüyor


66

Bir makinede pg_dump kullandım ve sonuç dosyasını bir başkasına kopyaladım. Şemanın aynı olduğuna inanıyorum. Ancak, alıyorum:

pg_restore: [archiver] input file does not appear to be a valid archive

Aşağıdaki işlemleri yaptım:

pg_dump -a -f db.txt dbname

ve:

pg_restore -a -d dbname db.txt

Neyin yanlış olabilir?


Dökümü, onu oluşturan makineye aktarmayı deneyin. Ayrıca Postgres versiyonlarını da kontrol ediniz.
Hank Gay,

Aynı makineye almayı deneyemem, çünkü bu bir üretim makinesi. Herhangi bir fikir, başka ne yapabilirim?
gruszczy

Bu çözüm bazı insanlar için de geçerli olabilir: stackoverflow.com/questions/42433414/…
Muhammad Hannan

Yanıtlar:


93

Psql'ye beslenecek şekilde tasarlanmış düz sql biçiminde damping yapıyorsunuz. Bu pg_restore tarafından tanınmıyor.

cat db.txt | psql dbname

hile yapmalı


5
veya psql dbname < db.txt;)
Aleksey Deryagin

26

pg_dumpVarsayılan olarak, verileri yeniden oluşturmak için gerekli sql komutlarını oluşturur. Onu kurtarmak için, sadece çağırmak gerekir psql(değil pg_restoregiriş olarak dosya ile). pg_restoresadece ikili (varsayılan değil ve daha az normal tavsiye edilmez ) formatı için kullanılacaktır pg_dump. Belgeleri oku .

Güncelleme: Kullanılacak olan pg_dumpikili formatlar ( -Fc -Ft) uygun pg_restoreve bazı ekstra esneklikler sunuyor. Ancak daha az standart (SQL olmayan), bazı araçlardan (örneğin bir php frontend) içe aktarma için daha az uygun veya bir metin editörü ile manipüle edilebiliyorlar ve diğer sürümlere ve hatta diğer veritabanlarına biraz daha az taşınabilir. Yedeklemeler için, varsayılan düz formatla yapıyorum. Diğer senaryolarda, ikili + pg_restore seçeneği eşit veya daha uygun olabilir.

Tutulması gereken nokta, Postgresql'de, tipik senaryoda , yedeklemenin normalde pg_dump (plain) ve standart komut satırı istemcisiyle ( psql ) geri yükleme işlemi gerçekleştirmesidir .


2
[OT] Özel çıkış biçiminin "önerilmemesi" durumu - cümle "ile ilgili farklılıklar için yalvarırım" Bu, veri yükleme işleminin yanı sıra nesne tanımlarını yeniden düzenleme olanağı sağlayan en esnek biçimdir ... " Bana oldukça onay olarak.
Milen A. Radev

"önerilmez" bir abartı oldu, katılıyorum. Ancak "en esnek" mutlaka "en çok tavsiye edilen" anlamına gelmez. Aydınlatılmış.
leonbloy

13

--format=cSeçeneği olarak iletmeyi deneyin pg_dump. Bu pg_restoregeri yüklemeye izin verecektir .


Bunu kim modederse, nedenini açıklamak ister mi? Kabul edilen cevap bunun işe yarayacağını açıklıyor :-)

@ skrafi: Amacın nedir?
psmears

1
üzgünüm, kopyalanan yapıştırılan yanlış çıktı, doğru olanı bu pg_restore: [archiver] did not find magic string in file headeryüzden bu basit sql dökümü için işe yaramaz
skrafi

@ skrafi: Ne demek istediğinden emin değilim. Eğer kullanırsanız pg_dump --format=c ...> archivefileve sonra kullanmak pg_restoreüzerine archivefiledaha sonra, (Ben sadece şimdi test edildiğinde en azından) iyi çalışıyor. Belki de dosyanız bir şekilde bozuk olabilir? Yoksa belirli bir böcek mi çarptın?
psmears

6

Eski veritabanımı yedeklemek ve geri yüklemek için yapacağım şey bu

Veritabanınızı yedeklemek için

pg_dump --format=c olddb_name > db_dump_file.dump

Bu yedeği geri yüklemek için

pg_restore -v -d newdb_name db_dump_file.dump

Devamı üzerinde pg_dump ve pg_restore


5

Windows kullanıcıları için deneyin

type db.txt | psql --username="YOURNAME" dbname

Tıkır tıkır çalışıyor


Bu beni kurtardı! En azından pencereler için cevap kabul edilmelidir.
Daniel Butler,

2

MySQL'in SOURCEkomutuna bir şey yapabilirsiniz :

psql dbname

Sonra, postgresql terminalinde:

\i filename

2

cat Instagram Hesabındaki Resim ve Videoları dumpFileName psql -h ip -d dbAdı -U kullanıcıAdı -W


1
Ne yaptığını ve neden yardım edebileceğini açıklarsanız genellikle yararlı olur.
Falcon Momot

1

Bu hata mesajı, yedekleme dosyasında (veya bu konudaki varsayımlarınız) aslında bir sorun olduğu anlamına da gelebilir.

Bir durumda, Docker konteynerine bir yedekleme dosyası ekledim ve geri yüklemeyi denedim, ancak başarısız oldu does not appear to be a valid archive. Aslında dosya doğru değildi, çünkü dosya doğru değildi.

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.