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
postgresql
sigra
sumber
sumber
public
?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.
sumber
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Paling mudah sebagai superuser (postgres
) denganpeer
otorisasi pw-kurang dipg_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 perlupg_restore
.Jika Anda terjebak dengan php, maka gunakan kembali tics
atau perintah exec (). Untuk perubahan Anda bisa menggunakan sed dengan cara yang sama.
Ini ada 6 karakter lagi
sumber
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.
sumber
Anda bisa menggunakannya
Lalu lepas semua skema yang tidak Anda butuhkan:
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.
sumber
memperluas jawaban user1113185 , inilah alur kerja lengkap menggunakan psql / pg_dump.
Berikut ini ekspor semua objek
old_schema
dan impor kenew_schema
skema baru , sepertiuser
, dalamdbname
database:sumber