2013-10-07 19 views
6

başka bir veritabanı adı içine postgres veritabanı geri ve ben veritabanı dökümü bir sorun var nasıl bu şekildeBugün postgres kullanmak

pg_dump zeus_development -U test > zeus_development.dump.out 

ne başka bir veritabanına zeus_production

geri yüklemek için wnat Nasıl yapabilirim? Olduğu gibi, her zaman template0 açık kullanın

psql -U test zeus_production -f /path/to/zeus_development.dump.out 

restore: Sonra

createdb -U test -T template0 zeus_production 

bu veritabanı üzerinde senin dökümü geri yükleyin:

+1

Yan not - düz metin yerine ikili döküm biçiminden birini kullanmak daha iyi olabilir. Döküm/geri yükleme işlemini hızlandıracak, döküm dosyasının boyutunu azaltacak ve geri yükleme işlemini kontrol etmek için bazı ek yollar sunacaktır. Ayrıntılar ['' '' '(http://www.postgresql.org/docs/current/static/app-pgdump.html) –

cevap

14

Basit, öncelikle template database olarak template0 kullanarak veritabanı oluşturmak her zaman boş ve değiştirilemez bir veritabanı. Eğer açık bir şablon kullanmıyorsanız, PostgreSQL template1 değerini alacaktır, ve eğer bir tablonun veya bir tablonun işlevine sahip olduğu gibi bazı nesneler varsa, geri yüklenirken bazı hatalar alacaksınız. Yine de, aynı ada sahip bir veritabanında geri yükleme yapsanız bile (zeus_development), aynı şekilde oluşturmalısınız (veya yeniden oluşturmalısınız). Boş bırakılırken -C seçeneğini kullanmıyorsanız (veya ikili bir dökümü kullanıyorsanız -C'un -C'u), daha az esneklik (farklı bir veritabanı adıyla geri yükleme gibi) vermenizi öneririz.

0

Aşağıdakileri yapmak daha kolay değil mi?

createdb -U test -T zeus_development zeus_production 
+0

Aslında yukarıdakiler işe yarıyor. Orijinal soru, yeni bir makineye taşındığını söylemedi. Sadece varsayıldı. -T seçeneği oldukça güçtür. – pedz

2

PostgresSQL belgeleri, özel biçimi kullanmamı etkiledi. Yıllardır kullanıyorum ve çeşitli avantajları var gibi görünüyor YMMV.

pg_restore --no-owner --dbname postgres --create ~/Desktop/pg_dump 
psql --dbname postgres -c 'ALTER DATABASE foodog_production RENAME TO foodog_development' 

dizisi öncesinde var olan hiçbir foodog_development ne de foodog_production veritabanları vardı: Bu benim için çalıştı ne burada dedi.

Veritabanını, depolandığı adla oluşturacak olan dökümden (~/Desktop/pg_dump) geri yükler. Yeniden adlandırmak, DB'yi istediğiniz şekilde adlandırır.

Kullanıcı adınız her iki makinede aynıysa, sahip-sahibi olmayabilir. Benim durumumda, dökümü user1 ve geri yükleme user2 olarak yapıldı. Yeni nesneler kullanıcı2'ye ait olmalı ve --no-sahibi bunu başarır.