ฉันจะคัดลอกpublic
สคีมาของฉันลงในฐานข้อมูลเดียวกันที่มีโครงสร้างตารางเต็มรูปแบบ, ข้อมูล, ฟังก์ชั่น, fk, pk และอื่น ๆ
เวอร์ชัน Postgres ของฉันคือ 8.4
PS ฉันต้องคัดลอกสคีมาฐานข้อมูล
ฉันจะคัดลอกpublic
สคีมาของฉันลงในฐานข้อมูลเดียวกันที่มีโครงสร้างตารางเต็มรูปแบบ, ข้อมูล, ฟังก์ชั่น, fk, pk และอื่น ๆ
เวอร์ชัน Postgres ของฉันคือ 8.4
PS ฉันต้องคัดลอกสคีมาฐานข้อมูล
คำตอบ:
ไม่มีวิธีง่ายๆในการทำเช่นนี้ใน pg_dump / pg_restore คุณสามารถลองทำสิ่งต่อไปนี้หากคุณสามารถลบฐานข้อมูลได้ชั่วคราว
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
): ที่ง่ายที่สุดเป็น superuser ( postgres
) กับ PW-น้อยอนุมัติในpeer
pg_haba.conf
Restore psql my_db -f '/path/to/file.pgsql'
หลังจากที่คุณได้เปลี่ยนชื่อสคีเดิม: หากคุณมีการถ่ายโอนข้อมูล SQL ธรรมดาที่คุณทำไม่pg_restore
จำเป็นต้อง
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
หากคุณติดอยู่กับ php ให้ใช้สำบัดสำนวนอย่างใดอย่างหนึ่ง
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
หรือคำสั่ง exec () สำหรับการเปลี่ยนแปลงคุณสามารถใช้ sed แบบเดียวกัน
ที่นี่มีอีก 6 ตัวอักษร
public
)
ใช้ pgAdmin คุณสามารถทำสิ่งต่อไปนี้ มันเป็นคู่มือสวย แต่อาจเป็นสิ่งที่คุณต้องการ วิธีการที่ใช้สคริปต์จะเป็นที่ต้องการมากขึ้น ไม่แน่ใจว่าวิธีนี้จะทำงานได้ดีถ้าคุณไม่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบและฐานข้อมูลของคุณมีขนาดใหญ่ แต่ควรใช้งานได้ดีกับฐานข้อมูลการพัฒนาที่คุณเพิ่งมีในคอมพิวเตอร์ของคุณ
คลิกขวาที่ชื่อสกีมาที่คุณต้องการคัดลอกและคลิกสำรองข้อมูล (คุณสามารถไปให้ลึกกว่านี้และเลือกที่จะสำรองโครงสร้างแทนทั้งสองอย่าง)
ตั้งชื่อไฟล์สำรองข้อมูลและเลือกรูปแบบ (ฉันมักจะใช้น้ำมันดิน)
คลิกสำรองข้อมูล
คลิกขวาที่สกีมาที่คุณสำรองและคลิกคุณสมบัติแล้วเปลี่ยนชื่อเป็นอย่างอื่นชั่วคราว (เช่นอุณหภูมิ )
คลิกราก schemas และคลิกขวาในเบราว์เซอร์วัตถุและคลิกสร้างโครงสร้างใหม่และให้คีชื่อประชาชน นี่จะเป็นสคีมาที่คุณคัดลอกมาจากข้อมูลสำรองของคุณ
คลิกขวาที่โครงสร้างใหม่ของประชาชนจากขั้นตอนที่ 5 และคลิกเรียกคืน กู้คืนจากไฟล์สำรองในขั้นตอนที่ 3
เปลี่ยนชื่อโครงสร้างใหม่ของประชาชนกับชื่อที่แตกต่างกัน (เช่นnewSchema )
เปลี่ยนชื่อtemprename schema จากขั้นตอนที่ 4 กลับไปเป็นชื่อเดิม
คุณสามารถใช้
CREATE DATABASE new_db TEMPLATE = old_db;
จากนั้นปล่อยสกีมาทั้งหมดที่คุณไม่ต้องการ:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
ข้อเสียเปรียบเพียงอย่างเดียวคือการเชื่อมต่อทั้งหมดไปยัง old_db ต้องถูกกำหนดก่อนที่คุณจะสามารถสร้างสำเนาได้ (ดังนั้นกระบวนการที่รันCREATE DATABASE
คำสั่งจะต้องเชื่อมต่อเช่นกับเทมเพลต 1)
หากไม่ใช่ตัวเลือก pg_dump / pg_restore เป็นวิธีเดียวที่จะทำได้
การขยายคำตอบของผู้ใช้11,1,185 คนนี่เป็นกระบวนการทำงานเต็มรูปแบบโดยใช้ psql / pg_dump
ต่อไปนี้จะทำการส่งออกออบเจ็กต์ทั้งหมดold_schema
และนำเข้าสู่new_schema
สคีมาใหม่user
ในdbname
ฐานข้อมูล:
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
เปล่า?