Bagaimana saya bisa menyalin public
skema saya ke database yang sama dengan struktur tabel penuh, data, fungsi, fk, pk, dll.
Versi Postgres saya adalah 8,4
PS Saya perlu menyalin skema BUKAN basis data
Bagaimana saya bisa menyalin public
skema saya ke database yang sama dengan struktur tabel penuh, data, fungsi, fk, pk, dll.
Versi Postgres saya adalah 8,4
PS Saya perlu menyalin skema BUKAN basis data
Jawaban:
Tidak ada cara sederhana untuk melakukan ini di pg_dump / pg_restore itu sendiri. Anda dapat mencoba yang berikut jika Anda dapat menghapus basis data sementara.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Paling mudah sebagai superuser ( postgres
) dengan peer
otorisasi pw-kurang di pg_haba.conf
. Kembalikan setelah Anda telah berganti nama skema asli: psql my_db -f '/path/to/file.pgsql'
. Jika Anda memiliki dump SQL biasa, Anda tidak perlu pg_restore
.
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
Jika Anda terjebak dengan php, maka gunakan kembali tics
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
atau perintah exec (). Untuk perubahan Anda bisa menggunakan sed dengan cara yang sama.
Ini ada 6 karakter lagi
public
).
Menggunakan pgAdmin Anda dapat melakukan hal berikut. Ini cukup manual, tapi mungkin itu yang Anda butuhkan. Pendekatan berbasis skrip akan jauh lebih diinginkan. Tidak yakin seberapa baik ini akan bekerja jika Anda tidak memiliki akses admin dan jika database Anda besar, tetapi harus berfungsi dengan baik pada database pengembangan yang baru saja Anda miliki di komputer lokal Anda.
Klik kanan nama skema yang ingin Anda salin dan klik Cadangan. (Anda bisa lebih dalam dari ini dan memilih untuk hanya mencadangkan struktur daripada keduanya).
Beri nama file cadangan dan juga pilih format. (Saya biasanya menggunakan Tar.)
Klik Cadangkan.
Klik kanan skema yang Anda buat cadangannya dan klik properti dan ubah namanya menjadi sesuatu yang lain untuk sementara. (mis. temprename )
Klik akar skema dan klik kanan di browser objek dan klik buat skema baru dan beri nama skema publik . Ini akan menjadi skema yang Anda salin dari cadangan Anda.
Klik kanan skema publik baru dari langkah 5. dan klik pulihkan. Pulihkan dari file cadangan di langkah 3.
Ubah nama skema publik menjadi nama yang berbeda (mis., Newschema ).
Ganti nama skema, ubah temprename dari langkah 4 kembali ke nama aslinya.
Anda bisa menggunakannya
CREATE DATABASE new_db TEMPLATE = old_db;
Lalu lepas semua skema yang tidak Anda butuhkan:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
Satu-satunya kelemahan adalah semua koneksi ke old_db harus ditentukan sebelum Anda dapat membuat salinan (sehingga proses yang menjalankan CREATE DATABASE
pernyataan harus terhubung misalnya ke template1)
Jika itu bukan opsi, pg_dump / pg_restore adalah satu-satunya cara untuk melakukannya.
memperluas jawaban user1113185 , inilah alur kerja lengkap menggunakan psql / pg_dump.
Berikut ini ekspor semua objek old_schema
dan impor ke new_schema
skema baru , seperti user
, dalam dbname
database:
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
public
?