मैं public
पूर्ण तालिका संरचना, डेटा, फ़ंक्शंस, fk, pk और आदि के साथ एक ही डेटाबेस में अपने स्कीमा की प्रतिलिपि कैसे बना सकता हूं ।
पोस्टग्रेज का मेरा संस्करण 8.4
PS है मुझे स्कीमा की प्रतिलिपि बनाने की आवश्यकता नहीं है डेटाबेस
मैं public
पूर्ण तालिका संरचना, डेटा, फ़ंक्शंस, fk, pk और आदि के साथ एक ही डेटाबेस में अपने स्कीमा की प्रतिलिपि कैसे बना सकता हूं ।
पोस्टग्रेज का मेरा संस्करण 8.4
PS है मुझे स्कीमा की प्रतिलिपि बनाने की आवश्यकता नहीं है डेटाबेस
जवाबों:
Pg_dump / pg_restore में ऐसा करने का कोई सरल तरीका नहीं है। यदि आप डेटाबेस को अस्थायी रूप से निकालने में सक्षम हैं, तो आप निम्न प्रयास कर सकते हैं।
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
:। सुपर -युसर के रूप में सबसे आसान ( postgres
) में pw- कम peer
प्राधिकरण के साथ pg_haba.conf
। मूल स्कीमा का नाम बदलने के बाद पुनर्स्थापित करें psql my_db -f '/path/to/file.pgsql'
:। यदि आपके पास एक सादे एसक्यूएल डंप है, तो आपको ज़रूरत नहीं है 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`
या निष्पादित () कमांड। परिवर्तन के लिए आप उसी तरह सेड का उपयोग कर सकते हैं।
यहाँ 6 और वर्ण हैं
public
) के रूप में प्रकट हो सकता है ।
PgAdmin का उपयोग करके आप निम्नलिखित कार्य कर सकते हैं। यह बहुत मैनुअल है, लेकिन आप सभी की जरूरत हो सकती है। एक स्क्रिप्ट आधारित दृष्टिकोण बहुत अधिक वांछनीय होगा। यह सुनिश्चित नहीं करें कि यदि आपके पास व्यवस्थापक पहुंच नहीं है और यदि आपका डेटाबेस बड़ा है, तो यह कितना अच्छा काम करेगा, लेकिन एक विकास डेटाबेस पर ठीक काम करना चाहिए जो आपके स्थानीय कंप्यूटर पर है।
स्कीमा नाम पर राइट-क्लिक करें जिसे आप कॉपी करना चाहते हैं और बैकअप पर क्लिक करें। (आप इस से अधिक गहराई तक जा सकते हैं और दोनों के बजाय केवल संरचना का बैकअप ले सकते हैं)।
बैकअप फ़ाइल को एक नाम दें और एक प्रारूप भी चुनें। (मैं आमतौर पर टार का उपयोग करता हूं।)
बैकअप पर क्लिक करें।
आपके द्वारा समर्थित स्कीमा पर राइट-क्लिक करें और गुणों पर क्लिक करें और इसे अस्थायी रूप से कुछ और नाम दें। (जैसे temprename )
स्कीमा रूट को क्लिक करें और ऑब्जेक्ट ब्राउज़र में राइट-क्लिक करें और नया स्कीमा बनाएं और स्कीमा को नाम सार्वजनिक करें । यह वह स्कीमा होगा जिसे आप अपने बैकअप से कॉपी कर रहे हैं।
नया स्कीमा सार्वजनिक पर राइट-क्लिक करेंचरण 5 से को और पुनर्स्थापना पर क्लिक करें। चरण 3 में बैकअप फ़ाइल से पुनर्स्थापित करें।
नए स्कीमा सार्वजनिक को एक अलग नाम (उदा। Newschema) का नाम बदलें ) का ।
स्कीमा टेम्प्रनाम का नाम बदलें चरण 4 से मूल नाम पर वापस।
आप उपयोग कर सकते हैं
CREATE DATABASE new_db TEMPLATE = old_db;
फिर उन सभी स्कीमाओं को छोड़ दें जिनकी आपको आवश्यकता नहीं है:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
एकमात्र दोष पुराने_db के लिए सभी कनेक्शनों का निर्धारण किया जाना चाहिए इससे पहले कि आप प्रतिलिपि बना सकें (इसलिए CREATE DATABASE
कथन को चलाने वाली प्रक्रिया को टेम्पलेट 1 से जोड़ना होगा)
यदि वह विकल्प नहीं है, तो pg_dump / pg_restore ही इसे करने का एकमात्र तरीका है।
user1113185 उत्तर पर विस्तार , यहाँ 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
?