Nasıl kopyalayabilirsiniz publicvs. tam tablo yapısı, veri, fonksiyonlar, fk, pk ve aynı veritabanına şema
8.4 Postgres Benim sürümü olduğunu
kopyalamak için PS I ihtiyacı şema DEĞİL veritabanını
Nasıl kopyalayabilirsiniz publicvs. tam tablo yapısı, veri, fonksiyonlar, fk, pk ve aynı veritabanına şema
8.4 Postgres Benim sürümü olduğunu
kopyalamak için PS I ihtiyacı şema DEĞİL veritabanını
Yanıtlar:
Bunu pg_dump / pg_restore içinde yapmanın basit bir yolu yoktur. Veritabanını geçici olarak kaldırabiliyorsanız, aşağıdakileri deneyebilirsiniz.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db. postgresPw-az peeryetkilendirme ile superuser ( ) kadar kolay pg_haba.conf. Özgün şema adını sonra Restore: psql my_db -f '/path/to/file.pgsql'. Eğer düz bir SQL dökümü varsa, do not gerek pg_restore.
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
Php ile sıkışmış iseniz o zaman ya geri tikleri kullanın
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
veya exec () komutu. Değişiklik için sed'i aynı şekilde kullanabilirsiniz.
6 karakter daha
public).
PgAdmin'i kullanarak aşağıdakileri yapabilirsiniz. Oldukça manuel, ancak ihtiyacınız olan her şey olabilir. Betik tabanlı bir yaklaşım çok daha istenir olacaktır. Yönetici erişiminiz yoksa ve veritabanınız büyükse bunun ne kadar işe yarayacağından emin değilsiniz, ancak yerel bilgisayarınızda bulunan bir geliştirme veritabanında gayet iyi çalışmalıdır.
Kopyalamak istediğiniz şema adına sağ tıklayın ve Yedekle seçeneğine tıklayın. (Bundan daha derine inebilir ve her ikisini de yerine yapıyı yedeklemeyi seçebilirsiniz).
Yedekleme dosyasına bir isim verin ve ayrıca bir format seçin. (Genellikle Tar kullanırım.)
Yedekle'ye tıklayın.
Yedeklediğiniz şemaya sağ tıklayın ve özellikleri tıklayın ve geçici olarak başka bir şeye yeniden adlandırın. (örn. temprename )
Şemaları kök tıklayın ve nesne tarayıcıda sağ tıklayın ve yeni bir şema oluşturmak ve şema adı vermek halkı . Bu, yedeklemenizden kopyaladığınız şema olacaktır.
Yeni şema sağ tıklayın halkı 5. adımdan itibaren ve geri yükleme tıklayın. 3. adımda yedek dosyadan geri yükleyin.
Yeni şema yeniden adlandırma halkı farklı bir ad (örn newschema ).
Şema temprename değişiklik adım 4'ten özgün adı için yeniden adlandırın .
Kullanabilirsin
CREATE DATABASE new_db TEMPLATE = old_db;
Sonra ihtiyacınız olmayan tüm şemaları bırakın:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
Tek dezavantajı, kopyayı oluşturabilmeniz için önce old_db ile olan bağlantıların belirlenmesi gerekir (bu nedenle CREATE DATABASEifadeyi çalıştıran işlem örneğin template1'e bağlanmalıdır)
Bu bir seçenek değilse, pg_dump / pg_restore bunu yapmanın tek yoludur.
user1113185 cevap genişleyen , işte psql / pg_dump kullanarak tam bir iş akışı.
Aşağıdakiler, tüm nesnelerini dışa old_schemaaktarır ve veritabanında new_schemaolduğu gibi yeni şemaya aktarır :userdbname
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
publicmı , yoksa sadece mı?