Komut satırını kullanarak postgres yedek dosyası geri yüklensin mi?


294

Postgresql'de yeniyim ve yerel olarak pgadmin3 kullanıyorum. Ancak uzak sunucuda böyle bir lüksüm yok.

Zaten veritabanının yedeğini oluşturdum ve kopyaladım, ancak komut satırından bir yedeği geri yüklemenin bir yolu var mı? Sadece GUI veya pg_dumps ile ilgili şeyleri görüyorum, bu yüzden birisi bana bu konuda nasıl gideceğimi söyleyebilirse, bu müthiş olurdu!

Yanıtlar:


366

Döküm dosyasını nasıl oluşturduğunuza bağlı olarak bakmanız gereken iki araç vardır.

İlk referans kaynağınız pg_dump(1), döküm sayfasının kendisini oluşturan man sayfası olmalıdır . Diyor ki:

Dökümler komut dosyası veya arşiv dosyası biçiminde çıkarılabilir. Komut dosyası dökümleri, veritabanını kaydedildiği sırada yeniden yapılandırmak için gereken SQL komutlarını içeren düz metin dosyalarıdır. Böyle bir komut dosyasından geri yüklemek için psql (1) 'e besleyin. Komut dosyaları diğer veritabanlarında ve diğer mimarilerde bile veritabanını yeniden oluşturmak için kullanılabilir; diğer SQL veritabanı ürünlerinde bile bazı değişikliklerle.

Veritabanını yeniden oluşturmak için pg_restore (1) ile alternatif arşiv dosyası formatları kullanılmalıdır. Pg_restore öğesinin nelerin geri yüklendiği konusunda seçici olmasına ve hatta öğelerin geri yüklenmeden önce yeniden düzenlenmesine izin verir. Arşiv dosya formatları mimariler arasında taşınabilir olacak şekilde tasarlanmıştır.

Bu, boşaltma şekline bağlıdır. Muhtemelen mükemmel file(1)komutu kullanarak anlayabilirsiniz - ASCII metin ve / veya SQL'den bahsediyorsa, geri yüklenmelidir, psqlaksi takdirde muhtemelen kullanmalısınız.pg_restore

Geri yükleme oldukça kolaydır:

psql -U username -d dbname < filename.sql

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

veya

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

İlgili sayfalarına göz atın - geri yüklemenin nasıl çalıştığını etkileyen birkaç seçenek var. Dökümlerin nasıl oluşturulduğuna bağlı olarak geri yüklemeden önce "canlı" veritabanlarınızı temizlemeniz veya bunları şablon0'dan (bir yorumda belirtildiği gibi) yeniden oluşturmanız gerekebilir.


3
IME neredeyse her zaman template0'dan yeni oluşturulan bir veritabanına geri yüklemek istiyorsunuz. Aksi takdirde, şablon1'de plpgsql'yi etkinleştirmek gibi bir şey yaptıysanız, geri yükleme işlemi tekrar yapmaya çalışır ve önerdiğiniz -1 anahtarı, tüm işlemin başarısız olacağı anlamına gelir. Yani seo.pg'yi (seo veritabanından yapılmış) yeni bir seo2 veritabanına geri yüklemek için "createdb -T template0 seo2" ve ardından "pg_restore -v -d seo2 seo.pg" gibi bir şey. Yedek dosyanız sadece bir .sql dosyasıysa, çakışan parçalarını el ile kesebilirsiniz.
araknit

61
Sahip olamazsınız -dve -faynı zamanda. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner

8
9.2 sürümünde "-f" seçeneği, döküm dosyasını değil bir çıktı dosyasını belirtir (ve muhtemelen önceki sürümlerde aynı anlama gelir).
David Resnick

4
İlgili olarak cannot be used together, buraya bakın: stackoverflow.com/questions/27882070/…
Abdull

3
@ Alex78191, tamamen başarısız ve geri dönebilen veya geçebilen tek bir işlem olarak yürütüldüğü anlamına gelir. Veritabanına erişimi de engelleyecektir.
ATN

216

yedek oluştur

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 özel biçimdir (sıkıştırılmış ve -j N ile paralel olarak yapılabilir) -b bloblar içerir, -v ayrıntılıdır, -f yedek dosya adıdır

yedekten geri yükle

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

-h localhost - seçeneğini ayarlamak için önemli


2
Bu komutları yürütmeden önce Posgresql bin klasöründe bulunmanız gerektiğini belirtmek isterim . Örneğin Windows'da (varsayılan klasöre yüklediyseniz) C: \ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl

90

postgresVeritabanlarında tam ayrıcalıklara sahip olmak için oturum açmanız gerekebilir .

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 

anahtar -Fyedekleme dosyasının biçimini belirtin:

  • c sıkıştırılmış ve en küçük yedekleme dosyası boyutuyla sonuçlanan özel PostgreSQL formatını kullanacaktır
  • d her dosyanın bir tablo olduğu dizin için
  • t TAR arşivi için (özel biçimden daha büyük)
  • -h/ --hostSunucunun üzerinde çalıştığı makinenin ana bilgisayar adını belirtir
  • -W/ --passwordKuvvet pg_dumpbir şifre istemi için bir veritabanına bağlamadan önce

yedeklemeyi geri yükle:

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

Parametre -C, verileri içe aktarmadan önce veritabanı oluşturmalıdır. Eğer işe yaramazsa, her zaman veritabanı oluşturabilirsiniz. komutla (kullanıcı postgresveya veritabanı oluşturma haklarına sahip başka bir hesap olarak)createdb db_name -O owner

pg_dump / psql'in

Bağımsız değişkeni belirtmediyseniz, -Fvarsayılan düz metin SQL biçimi (veya ile birlikte -F p) kullanıldı. O zaman kullanamazsın pg_restore. İle veri aktarabilirsiniz psql.

destek olmak:

pg_dump -U username -f backup.sql database_name

onarmak:

psql -d database_name -f backup.sql

DigitalOcean dokku dökümü bir veritabanını geri yüklemek için "psql -d veritabanı_adı -f backup.sql" komutunu kullandım. Harika çalıştı.
NineBlindEyes

1
Eğer kullanıcı (örneğin postgres) için bir şifre ayarlanmışsa psql kullanırken -Wseçenek kullanılmalıdır. Örneğin su postgres, terminalden herhangi bir şey yapmadan Ubuntu'da $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sql, yerel ana bilgisayarımda yedeklememi geri yüklemek için benim için çalışan komut. O Not -hseçeneği gereklidir.
Jignesh Gohel

@JiggneshhGohel Kılavuzda belirtildiği gibi: -Wseçenek asla gerekli değildir. pg_dumpsunucu parola doğrulaması isterse otomatik olarak parola ister. Ayrıca PGPASSWORDdüz metin parolalar kullanıyorsanız env değişkenini de kullanabilirsiniz . -hvarsayılan PGHOSTgeçerli değilse gereklidir . Bu seçenekler birçok PostgreSQL aracı için ortaktır, bu nedenle bu soruyu cevaplamak için gerekli değildir (büyük ölçüde kurulumunuza bağlıdır).
Tombart

@ İkinci seçenek pg_dump/psqlbölümünüzü benim için çalışıyor. ama 1. bölüm pg_dump/pg_restorebenim için geri yükleme için çalışmıyor. Teşekkür ederim.
Anjan Biswas

@AnjanBiswas İlk seçenek daha fazla CPU'ya ihtiyaç duyan sıkıştırılmış arşiv kullanmaktır, ancak yedekleme dosyası diskte daha az yer kaplar. Sadece uygun sıkıştırmayı seçmeniz gerekir, örneğin-Fc
Tombart

60

POSTGRESQL 9.1.12

DÖKÜMÜ:

pg_dump -U user db_name > archive_name.sql

kullanıcı şifresini girin ve enter tuşuna basın.

ONARMAK:

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

kullanıcı şifresini girin ve enter tuşuna basın.


31

pg_dumpVeritabanını geri yüklemek için kullandığım sürümüm aşağıdadır :

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

veya kullanın psql:

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

burada -hana bilgisayar, -pbağlantı noktası, -uoturum açma kullanıcı -dadı, veritabanı adı


2
Govind Singh, cevabımı neden düzenledin? Değişiklikleriniz yeni bir şey getirmiyor ..
Yahor M

1
my_new_databasekullanırken zaten var olmalı psql, değil mi?
Elmex80s

22

GZIP ile yedekleme ve geri yükleme

Daha büyük boyutlu veritabanı için bu çok iyi

destek olmak

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

onarmak

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

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


1
Ubuntu için şunları kullanabilirsiniz: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlVeritabanında çalışma izinlerini almak için. Ayrıca --clean, tüm mevcut verileri silecek olan damping yaparken bayrağı da işe yarayabilir.
Sebastian

Benim için harika ve temiz bir çözüm çalışıyor. Teşekkür ederim!
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}

8

Bu benim için çalıştı:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump

Teşekkürler, --no-ownergerçekten bana yardımcı oldu.
bonafernando

7

1. terminali açın.

2. aşağıdaki komutla veritabanınızı yedekleyin

postgres kutunuz - /opt/PostgreSQL/9.1/bin/

veritabanı sunucunuz - 192.168.1.111

yedekleme dosyanızın konumu ve adı - /home/dinesh/db/mydb.backup

kaynak db adınız - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' - port 5432 - kullanıcı adı "postgres" --no-şifre --format custom --blobs --file "/ home / dinesh / db /mydb.backup "" veritabanım "

3. mydb.backup dosyasını hedefe kaydedin.

sunucunuz - localhost

veritabanı adınızı girin - mydatabase

yedeklemeyi geri yüklemek için veritabanı oluşturun.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "VERİTABANI OLUŞTUR Mydatabase"

yedeklemeyi geri yükleyin.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' - port 5432 - kullanıcı adı "postgres" --dbname "mydatabase" --no-şifre --clean "/ home / dinesh / db / mydb. destek olmak"


4

Pg_dump kullanarak bir yedek oluşturursanız, aşağıdaki şekilde kolayca geri yükleyebilirsiniz:

  1. Komut satırı penceresini aç
  2. Postgres bin klasörüne gidin. Örneğin: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Veritabanınızı geri yükleme komutunu girin. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Postgres kullanıcınız için şifre girin
  5. Geri yükleme işlemini kontrol edin

4

1) psql terminalini açın.

2) Döküm dosyasını açın / açın.

3) Boş bir veritabanı oluşturun.

4) .dump dosyasını geri yüklemek için aşağıdaki komutu kullanın

<database_name>-# \i <path_to_.dump_file>

4

bunu dene:

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

DB psql dosyasını .sql dosyasından geri yükleme


psql -U <kullanıcı adı> -d <dbname> -f <filename> .sql
Faysal Maqsood



2

Postgres yedek dosyasını geri yüklemek, yedeklemeyi ilk etapta nasıl aldığınıza bağlıdır.

-F c veya -F d ile pg_dump kullandıysanız pg_restore kullanmanız gerekir, aksi takdirde

psql -h localhost -p 5432 -U postgres <yedekleme dosyası

Postgres veritabanlarını yedeklemenin ve geri yüklemenin 9 yolu


Veritabanı adı bölümünü kaçırdığınızı ve hedef veritabanı bulunmadığından şikayet edeceğinizi biliyor musunuz?
Pere

2

Aşağıdaki komutların size yardımcı olup olmayacağını görmeye çalışın:

sudo su - yourdbuser
psql
\i yourbackupfile

2

Necropost için özür dilerim, ama bu çözümler benim için işe yaramadı. Postgres 10'dayım. Linux'ta:

  1. Dizini pg_hba.conf olarak değiştirmek zorunda kaldım.
  2. Burada belirtildiği gibi eşden md5 yöntemini değiştirmek için dosyayı düzenlemek zorunda kaldı
  3. Hizmeti yeniden başlatın: service postgresql-10 restart
  4. Benim backup.sql dosyasının bulunduğu dizini değiştirin ve çalıştırın:
    psql postgres -d database_name -1 -f backup.sql

    -database_name veritabanımın adı

    -backup.sql, .sql yedek dosyamın adı.


1

Pg_dump çalıştırırken kimlik doğrulama sorunları yaşıyordum, bu yüzden döküm dosyamı taşıdım

mv database_dump /tmp

temp dizinine girip

su -u postgres
cd /tmp
pg_restore database_dump

Büyük bir veritabanı dökümü varsa, yalnızca geçerli kullanıcınızın ve postgres kullanıcınızın erişebileceği ve veritabanı dökümü dosyasına buna ekleyebileceği başka bir dizin oluşturmak isteyebilirsiniz.


1

Yedek bir SQL dosyanız varsa, kolayca geri yükleyebilirsiniz. Sadece aşağıda verilen talimatları izleyin

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 

Gerekirse postgres kullanıcınız için şifre yazın ve Postgres'in çalışmasını sağlayın. Ardından geri yükleme işlemini kontrol edebilirsiniz.


1

Burada döküm dosya uzantısı (* .dump) bahseder görmedim.

Bu çözüm benim için çalıştı:

Bir döküm dosyası aldım ve kurtarmam gerekiyordu.

İlk olarak bunu yapmaya çalıştım pg_restoreve var:

pg_restore: error: input file appears to be a text format dump. Please use psql.

Ben yaptım psqlve iyi çalıştı:

psql -U myUser-d myDataBase < path_to_the_file/file.dump

0

Verilerinizi yedeklemek veya bir yedekten geri yüklemek istiyorsanız, aşağıdaki komutları çalıştırabilirsiniz:

  1. Verilerinizin yedeğini oluşturmak için postgres \ bin \ dizininize gidin C:\programfiles\postgres\10\bin\ve aşağıdaki komutu yazın:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Bir yedekten veri geri yüklemek için postgres \ bin \ dizininize gidin C:\programfiles\postgres\10\bin\ve aşağıdaki komutu yazın:

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

    Lütfen yedekleme dosyasının mevcut olduğundan emin olun.


-3

Aşağıdaki örneğe bakın onun çalışma

C: / Program Dosyaları / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 - kullanıcı adı "postgres" --dbname "newDatabase" --no-password --verbose

" C: \ Kullanıcılar \ Yogesh \ İndirilenler \ new Download \ DB.backup "

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.