it-swarm.asia

PostgreSQL: Bagaimana cara membuat salinan lengkap skema database dalam database yang sama?

Bagaimana saya bisa menyalin skema public saya ke dalam database yang sama dengan struktur tabel lengkap, data, fungsi, fk, pk, dll.
Versi Postgres saya adalah 8.4
P.S. Saya perlu menyalin skema BUKAN basis data

27
sigra

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.

  1. Ambil dump skema publik Anda menggunakan pg_dump
  2. jalankan "ALTER SCHEMA public RENAME TO public_copy"
  3. Kembalikan dump skema publik Anda dari langkah 1 menggunakan pg_restore
24
user1113185
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 kedua tics kembali

`/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

9
Scott Marlowe

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.

  1. Klik kanan nama skema yang ingin Anda salin dan klik Cadangan. (Anda bisa lebih dalam dari ini dan memilih untuk hanya mencadangkan struktur alih-alih keduanya).

  2. Beri nama file cadangan dan juga pilih format. (Saya biasanya menggunakan Tar.)

  3. Klik Cadangkan.

  4. Klik kanan skema yang Anda buat cadangannya dan klik properti dan ubah namanya menjadi sesuatu yang lain untuk sementara. (mis. temprename)

  5. Klik root skema dan klik kanan di browser objek dan klik buat skema bar dan berikan skema nama publik. Ini akan menjadi skema yang Anda salin dari cadangan Anda.

  6. Klik kanan skema baru publik dari langkah 5. dan klik pulihkan. Pulihkan dari file cadangan di langkah 3.

  7. Ganti nama skema baru publik ke nama yang berbeda (mis. newschema).

  8. Ganti nama skema temprename ubah dari langkah 4 kembali ke nama aslinya.

7
Kuberchaun

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 salinannya (sehingga proses yang menjalankan CREATE DATABASE pernyataan harus terhubung mis. ke template1)

Jika itu bukan opsi, pg_dump/pg_restore adalah satu-satunya cara untuk melakukannya.

5

memperluas pada user1113185 answer , inilah alur kerja lengkap menggunakan psql/pg_dump.

Berikut ini mengekspor semua objek old_schema dan mengimpornya ke yang baru new_schema skema, sebagai 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
3
dwelle