2014-06-06 20 views
5

Postgres'te yeniyim ve bir SQL sorgusunda farklı veritabanlarının verilerine erişemediğimi keşfettim. Ayrıca Postgres'de şema kavramını öğrenmiş.Postgres: Veriyi bir DB'nin genel şemasından başka bir DB'nin yeni şemasına taşımanın en iyi yolu

Şimdi, iki veritabanları

db1 ve

Hem kamu şemada aynı isimde tablolar db2 var. new_schema

Ve

Bunu yapmanın en kolay yolu nedir db1.new_schema için db2.public veri taşıma:

Şimdi, adı ile db1 yeni şema oluşturmak istiyorsunuz?

cevap

6

Bunu yapmanın en kolay yolu şemaları yeniden adlandırmaktır. Ancak, db1 veritabanının tek kullanıcısı olduğunuzdan emin olmalısınız.

, db1 içinde şema halkı gizlemek İlk:

alter schema public rename to original_public; 
create schema public; 

Sonraki, yedekleme yapmak ve geri yükleme:

$ pg_dump --format custom --file "my_backup" --schema "public" "db2" 
$ pg_restore --dbname "db1" "my_backup" 

Son olarak, uygun şema adlarını yeniden:

alter schema public rename to my_schema; 
alter schema original_public rename to public; 

Başka seçenek dblink. kullanmaktır. Farklı veritabanlarının verilerine erişilmesini sağlar.

1

İhracat "kamu" Db2 dan (atlama hibeler ve sahiplik):

pg_dump -xO -n public db2 > db2.sql 

ihraç dosyası (bir yere üst kısmına yakın) arama yolunu kuracak:

SET search_path = public, pg_catalog; 

değişikliği bunu için :

CREATE SCHEMA IF NOT EXISTS new_schema; 
SET search_path = new_schema, pg_catalog; 

İthalat zamanki gibi DB1'i için:

psql db1 < db2.sql 

Öncelikle db1'de herkesten herkesi yeni bir şemaya taşımak isteyeceksiniz. şema zaten db1 kurmak ise

, tek seferde transferi yapabilirsiniz:

pg_dump -xO -n public db2 | sed 's/search_path = public/search_path = new_schema/' | psql db1 

tavsiye etmem elbette test bir çok olmadan.

İlgili konular