PostgreSQL में एक डेटाबेस की एक प्रति बनाना


728

PgAdmin में एक नए से पूरे डेटाबेस (इसकी संरचना और डेटा) की प्रतिलिपि बनाने का सही तरीका क्या है?

जवाबों:


1120

नया डेटाबेस बनाते समय पोस्टग्रेज सर्वर पर किसी भी मौजूदा डेटाबेस के उपयोग की अनुमति देता है। मुझे यकीन नहीं है कि क्या pgAdmin आपको डेटाबेस बनाने के विकल्प पर विकल्प देता है, लेकिन आपको क्वेरी विंडो में निम्नलिखित को निष्पादित करने में सक्षम होना चाहिए, यदि यह नहीं है:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

फिर भी, आप प्राप्त कर सकते हैं:

ERROR:  source database "originaldb" is being accessed by other users

डेटाबेस से अन्य सभी उपयोगकर्ताओं को डिस्कनेक्ट करने के लिए, आप इस क्वेरी का उपयोग कर सकते हैं:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();

68
ध्यान दें कि इसके लिए काम करने के लिए ओरिजिनल को निष्क्रिय (कोई लिख लेनदेन नहीं) करना होगा।
19ec10 में synecdoche

62
pgAdmin3 में, ऑब्जेक्ट ब्राउज़र (बाएं) फलक में, मैं चुन सकता हूं Servers-> ((मेरा सर्वर) -> Databases, डेटाबेस पर राइट-क्लिक करें, और "नया डेटाबेस" चुनें। विकल्पों में से एक टेम्पलेट है, और डेटाबेस बनाने के लिए उपयोग किया जाने वाला SQL समकक्ष है। यह है तो बहुत तेजी से एक डंप से / एक ही सर्वर पर बहाल।
jwhitlock

22
मुझे पता है कि यह एक पुराना क्यू / ए है, लेकिन मुझे लगता है कि इसे स्पष्टीकरण की आवश्यकता है: जब @synecdoche कहता है कि ओरिजिनल को निष्क्रिय होना चाहिए, इसका मतलब है कि कोई भी संभावना नहीं है। इस तरह से एक डेटाबेस "नकल" ओरिजनल लॉक नहीं करता है। PostgreSQL केवल कॉपी शुरू करने से रोकता है अगर कोई अन्य ओरिजिनल एक्सेस कर रहे हैं - कॉपी शुरू होने के बाद नहीं, तो यह संभव है कि एक और कनेक्शन डेटाबेस को संशोधित कर सके जबकि "कॉपी" हो रही है। IMHO, यह सबसे आसान उत्तर हो सकता है, लेकिन "सर्वश्रेष्ठ" डंप / पुनर्स्थापना का उपयोग करना होगा।
जोश

10
मैंने बस यही देखा। @Josh: जबकि टेम्प्लेट के साथ डेटाबेस बनाकर ओरिजिनल कॉपी की जा रही है, तो postgresql इसे एक नया कनेक्शन बनाने की अनुमति नहीं देता है, इसलिए कोई बदलाव संभव नहीं है।
ceteras

4
ध्यान दें कि यदि आप pgAdmin का उपयोग कर रहे हैं और CREATE DATABASE को निष्पादित कर रहे हैं ... SQL कमांड विंडो से xxx को हटाएं, तो आपको मुख्य pgAdmin विंडो में डेटाबेस से डिस्कनेक्ट करना होगा या आपको डेटाबेस से जुड़े उपयोगकर्ताओं के बारे में त्रुटि मिलेगी।
जैक आरजी

296

बेल के उत्तर का एक कमांड-लाइन संस्करण :

createdb -O ownername -T originaldb newdb

यह डेटाबेस मास्टर के विशेषाधिकारों के तहत चलाया जाना चाहिए, आमतौर पर पोस्टग्रेज होता है।


5
यह एक अच्छा कमांड है, लेकिन createdb: database creation failed: ERROR: source database "conf" is being accessed by other usersयदि आप इसे एक उत्पादन डेटाबेस पर करने की कोशिश करते हैं और जैसा कि आप चाहते हैं कि आप इसे कॉपी बनाने के लिए बंद नहीं करना चाहते हैं।
सोरिन

7
हां, इस आदेश के अनुसार एक ही चेतावनी लागू होती है, जैसा कि स्पष्ट रूप से DATABASE आह्वान को स्पष्ट करता है। बेल के उत्तर के लिए टिप्पणियों की तरह ऊपर कहा गया है, डेटाबेस निष्क्रिय होना चाहिए।
zbyszek

108

मौजूदा डेटाबेस को क्लोन करने के लिए पोस्टग्रेज के साथ आप ऐसा कर सकते हैं

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

IT त्रुटि से बचने वाले स्रोत db के सभी कनेक्शन को मार देगा

ERROR:  source database "SOURCE_DB" is being accessed by other users

7
एक स्क्रिप्ट समाधान उल्लेख पहुँच त्रुटि से बचने के लिए +1
धमकाने

14
Postgres 9.2 पर मैं बदलने के लिए procpidके साथ pidकरने के लिए काम इस के लिए
marxjohnson

75

उत्पादन वातावरण में, जहाँ मूल डेटाबेस ट्रैफ़िक में है, मैं बस उपयोग कर रहा हूँ:

pg_dump production-db | psql test-db

8
इस पद्धति के साथ मैंने जो एक समस्या पाई है, वह यह है कि pg_dump तब तक अपना लेन-देन खुला रखेगा जब तक कि नए डेटाबेस में पुनर्स्थापना पूरी नहीं हो जाती, भले ही pg_dump ने वास्तव में अपना डंप समाप्त कर लिया हो। यह कुछ मामलों में लॉकिंग मुद्दों का कारण बन सकता है (उदाहरण के लिए, यदि स्रोत डीबी पर एक डीडीएल स्टेटमेंट चलाया जाता है)।
क्रिस बटलर

3
अस्थायी मध्यवर्ती फ़ाइलों का उपयोग नहीं करने के लिए प्लस एक।
अर्ध अराम

यह मेरा समाधान भी था। कल यह काम कर गया, अब यादृच्छिक अद्वितीय बाधा का उल्लंघन किया जाता है। नोट: मैं सभी तालिका रिसीवर db पर छोड़ता हूं।
गनजपपर


1
यह मान लेते हैं कि टेस्ट-डीबी मौजूद है। अन्यथा, $ createdb newdb
सैमगुडी

50

PgAdmin के बारे में नहीं जानते, लेकिन pgdumpआपको SQL में डेटाबेस का एक डंप देता है। आपको केवल एक ही नाम से एक डेटाबेस बनाना है और करना है

psql mydatabase < my dump

सभी तालिकाओं और उनके डेटा और सभी एक्सेस विशेषाधिकारों को पुनर्स्थापित करने के लिए।


धन्यवाद, मुझे एक और सर्वर से एक डंप बनाने की आवश्यकता थी, और ऐसा लगता है कि इससे मदद मिलती है: postgresql.org/docs/8.3/interactive/…
egaga

19
आप यह भी कर सकते हैं, pg_dump -U postgres sourcedb | psql -U postgres newdbहालांकि इस तकनीक की दक्षता संदिग्ध हो सकती है (क्योंकि आप शायद पढ़ते और लिखते समय संदर्भ समाप्त कर देते हैं)
फ्रैंक किसान Frank

1
आप अपने डंप को रिमोट मशीन से ssh: ssh dbserver pg_dump DBNAME | psql NEWDB... या pg_dump DBNAME | ssh otherserver pgsql NEWDB ... के माध्यम से भी प्राप्त कर सकते हैं।
घटि

23

सबसे पहले, sudoडेटाबेस उपयोगकर्ता के रूप में:

sudo su postgres

PostgreSQL कमांड लाइन पर जाएं:

psql

नया डेटाबेस बनाएँ, अधिकार दें और बाहर निकलें:

CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d

पुराने डेटाबेस से संरचना संरचना और डेटा को नए में कॉपी करें:

pg_dump old_database_name | psql new_database_name

कैसे सुनिश्चित करें कि एवरीथिंग ठीक है यहां तक ​​कि कुछ त्रुटियां (नेटवर्क मुद्दा) भी हुआ? माइग्रेशन के बाद दोनों डेटाबेस समान हैं या नहीं, इसकी जांच कैसे करें?
बीएई

जब भी सामना हो तो त्रुटियों को टर्मिनल में प्रदर्शित किया जाना चाहिए। ऑपरेशन के बाद दो डेटाबेस समान होने चाहिए। हालांकि, मुझे नहीं पता कि यह कैसे जांचना है ...
मैथ्यू रोडिक

2
एक आकर्षण की तरह काम करता है, मैंने इसे तब किया जब डेटाबेस उत्पादन में था।
बायोड्रॉड

यह अच्छी तरह से काम करने के लिए प्रकट होता है; हालाँकि, दो डेटाबेस के माध्यम से अलग डिस्क आकार है \l+। आकार में अंतर क्यों?
kosgeinsky

@kosgeinsky का यहाँ व्यापक रूप से उत्तर दिया गया है: dba.stackexchange.com/a/102089/39386
मैथ्यू रोडिक

18

मैंने ऊपर से उदाहरणों के साथ इस दृष्टिकोण को एक साथ जोड़ दिया। मैं एक "अंडर लोड" सर्वर पर काम कर रहा हूं और त्रुटि तब मिली जब मैंने @zbyszek से दृष्टिकोण का प्रयास किया। मैं भी एक "कमांड लाइन केवल" समाधान के बाद था।

createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users

यहां मेरे लिए काम किया गया है ( कमांड nohupएक फ़ाइल में आउटपुट को स्थानांतरित करने और सर्वर डिस्कनेक्ट से बचाने के लिए पूर्व निर्धारित है ):

  1. nohup pg_dump exampledb > example-01.sql
  2. createdb -O postgres exampledbclone_01

    मेरा उपयोगकर्ता "पोस्टग्रेज" है

  3. nohup psql exampledbclone_01 < example-01.sql


15

PgAdmin में आप अपने मूल डेटाबेस से एक बैकअप बना सकते हैं, और फिर बस एक नया डेटाबेस बना सकते हैं और अभी बनाए गए बैकअप से पुनर्स्थापित कर सकते हैं:

  1. स्रोत डेटाबेस, बैकअप ... पर राइट-क्लिक करें और फ़ाइल में डंप करें।
  2. राइट क्लिक, न्यू ऑब्जेक्ट, न्यू डेटाबेस ... और डेस्टिनेशन को नाम दें।
  3. नए डेटाबेस पर राइट क्लिक करें, पुनर्स्थापित करें ... और अपनी फ़ाइल चुनें।

मेरे पास विदेशी कुंजियों के माध्यम से संबंधित टेबल हैं और यह ठीक काम किया है।
रान्डेल ब्लेक

12

PgAdmin में एक नए से पूरे डेटाबेस (इसकी संरचना और डेटा) की प्रतिलिपि बनाने का सही तरीका क्या है?

उत्तर:

CREATE DATABASE newdb WITH TEMPLATE originaldb;

आजमाया और परखा गया।


3
इसके उपयोग में न होने के लिए ओरिजिनल की आवश्यकता होती है। आइसोमॉर्फ की विधि नहीं है।
ब्रैडली

2
वही उत्तर आपके लिए लगभग तीन साल पहले प्रदान किया गया था
जेसन एस

8

से प्रलेखन , का उपयोग कर createdbया CREATE DATABASEटेम्पलेट के साथ प्रोत्साहित नहीं किया जाता है:

हालाँकि यह टेम्प्लेट 1 के अलावा किसी अन्य डेटाबेस को अपने नाम को टेम्प्लेट के रूप में निर्दिष्ट करके कॉपी करना संभव है, यह सामान्य उद्देश्य "COP DATABASE" सुविधा के रूप में नहीं है। प्रमुख सीमा यह है कि कोई अन्य सत्र टेम्पलेट डेटाबेस से नहीं जोड़ा जा सकता है जबकि इसे कॉपी किया जा रहा है। अगर कोई अन्य कनेक्शन चालू होता है, तो DATEABASE क्रिएट होगा; अन्यथा, जब तक DATABASE पूरा नहीं हो जाता है, तब तक टेम्पलेट डेटाबेस के नए कनेक्शन लॉक हो जाते हैं।

pg_dumpया pg_dumpallडेटाबेस और सभी डेटा की प्रतिलिपि बनाने के लिए एक अच्छा तरीका है। यदि आप pgAdmin जैसे GUI का उपयोग कर रहे हैं, तो जब आप बैकअप कमांड निष्पादित करते हैं, तो इन कमांड को पर्दे के पीछे बुलाया जाता है। एक नए डेटाबेस की नकल दो चरणों में की जाती है: बैकअप और पुनर्स्थापना

pg_dumpallPostgreSQL क्लस्टर पर सभी डेटाबेस को बचाता है। इस दृष्टिकोण का नुकसान यह है कि आप डेटाबेस बनाने और डेटा को पॉप्युलेट करने के लिए SQL से भरी संभावित बहुत बड़ी टेक्स्ट फ़ाइल के साथ समाप्त होते हैं। इस दृष्टिकोण का लाभ यह है कि आपको क्लस्टर के लिए सभी भूमिकाएं (अनुमतियां) मुफ्त में मिलती हैं। सभी डेटाबेस को डंप करने के लिए सुपरयूज़र खाते से ऐसा करें

pg_dumpall > db.out

और बहाल करने के लिए

psql -f db.out postgres

pg_dumpकुछ संपीड़न विकल्प हैं जो आपको बहुत छोटी फाइलें देते हैं। मेरे पास एक प्रोडक्शन डेटाबेस है जो मैं दिन में दो बार बैकअप करता हूं ताकि क्रोन जॉब का उपयोग किया जा सके

pg_dump --create --format=custom --compress=5 --file=db.dump mydatabase

जहां compressसंपीड़न स्तर (0 से 9) है और डेटाबेस बनाने के लिए कमांड जोड़ने के लिए createकहता pg_dumpहै। का उपयोग करके पुनर्स्थापित करें (या नए क्लस्टर में जाएँ)

pg_restore -d newdb db.dump

जहाँ newdb उस डेटाबेस का नाम है जिसे आप उपयोग करना चाहते हैं।

अन्य बातों के बारे में सोचने के लिए

अनुमतियाँ प्रबंधित करने के लिए PostgreSQL ROLES का उपयोग करता है। इनसे नकल नहीं होती pg_dump। इसके अलावा, हमने postgresql.conf और pg_hba.conf (यदि आप डेटाबेस को किसी अन्य सर्वर पर ले जा रहे हैं) में सेटिंग्स से निपटा नहीं है । आपको अपने आप ही गोपनीय सेटिंग्स का पता लगाना होगा। लेकिन एक चाल है जो मैंने अभी भूमिकाओं का समर्थन करने के लिए खोजी है। रोल्स को क्लस्टर स्तर पर प्रबंधित किया जाता है और आप कमांड लाइन स्विच के pg_dumpallसाथ भूमिकाओं का बैकअप लेने के लिए कह सकते हैं --roles-only


7

PostgreSQL 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;

3
यह संभवतः के रूप में लागू किया जाता है CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;और इसके परिणामस्वरूप मूल डेटाबेस को निष्क्रिय होना चाहिए (राइट एक्सेस के साथ कोई कनेक्शन नहीं) और मूल डेटाबेस के किसी भी नए कनेक्शन को रोका जाता है जबकि प्रतिलिपि प्रक्रिया में है। यदि आप इससे खुश हैं, तो यह काम करता है।
मिक्को रेंटालीनें

अच्छा विस्तार। धन्यवाद!
आर्टा

6

अभी भी दिलचस्पी रखने वालों के लिए, मैं एक बैश स्क्रिप्ट के साथ आया हूं जो लेखक को चाहता था (कम या ज्यादा)। मुझे एक उत्पादन प्रणाली पर एक दैनिक व्यापार डेटाबेस की प्रतिलिपि बनानी पड़ी, यह स्क्रिप्ट चालबाजी करती है। डेटाबेस का नाम / उपयोगकर्ता / pw मान बदलने के लिए याद रखें।

#!/bin/bash

if [ 1 -ne $# ]
then
  echo "Usage `basename $0` {tar.gz database file}"
  exit 65;
fi

if [ -f "$1" ]
then
  EXTRACTED=`tar -xzvf $1`
  echo "using database archive: $EXTRACTED";
else
  echo "file $1 does not exist"
  exit 1
fi


PGUSER=dbuser
PGPASSWORD=dbpw
export PGUSER PGPASSWORD

datestr=`date +%Y%m%d`


dbname="dbcpy_$datestr"
createdbcmd="CREATE DATABASE $dbname WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;"
dropdbcmp="DROP DATABASE $dbname"

echo "creating database $dbname"
psql -c "$createdbcmd"

rc=$?
if [[ $rc != 0 ]] ; then
  rm -rf "$EXTRACTED"
  echo "error occured while creating database $dbname ($rc)"
  exit $rc
fi


echo "loading data into database"
psql $dbname < $EXTRACTED > /dev/null

rc=$?

rm -rf "$EXTRACTED"

if [[ $rc != 0 ]] ; then
  psql -c "$dropdbcmd"
  echo "error occured while loading data to database $dbname ($rc)"
  exit $rc
fi


echo "finished OK"

5

डेटाबेस डंप बनाने के लिए

cd /var/lib/pgsql/
pg_dump database_name> database_name.out

डेटाबेस डंप को रीसेट करने के लिए

psql -d template1
CREATE DATABASE database_name WITH  ENCODING 'UTF8' LC_CTYPE 'en_US.UTF-8' LC_COLLATE 'en_US.UTF-8' TEMPLATE template0;
CREATE USER  role_name WITH PASSWORD 'password';
ALTER DATABASE database_name OWNER TO role_name;
ALTER USER role_name CREATEDB;
GRANT ALL PRIVILEGES ON DATABASE database_name to role_name;


CTR+D(logout from pgsql console)
cd /var/lib/pgsql/

psql -d database_name -f database_name.out

5

यहां केवल pgadmin4 GUI (बैकअप और पुनर्स्थापना के माध्यम से) डेटाबेस का उपयोग करके प्रतिलिपि बनाने की पूरी प्रक्रिया है

Postges Pgadmin4 के साथ आता है। यदि आप macOS का उपयोग करते हैं तो आप CMD+ को दबा सकते हैं SPACEऔर pgadmin4इसे चलाने के लिए टाइप कर सकते हैं । यह क्रोम में एक ब्राउज़र टैब खोलेगा।


नकल के लिए कदम

1. बैकअप बनाएँ

डेटाबेस पर राइट-क्लिक करके ऐसा करें -> "बैकअप"

यहां छवि विवरण दर्ज करें

2. फाइल को एक नाम दें।

की तरह test12345। बैकअप पर क्लिक करें। यह एक बाइनरी फ़ाइल डंप बनाता है, यह एक .sqlप्रारूप में नहीं है

यहां छवि विवरण दर्ज करें

3. देखें कि यह कहाँ डाउनलोड किया गया है

आपकी स्क्रीन के निचले भाग में एक पॉपअप होना चाहिए। यह देखने के लिए कि आपका बैकअप कहां से डाउनलोड हुआ है, "अधिक विवरण" पृष्ठ पर क्लिक करें

यहां छवि विवरण दर्ज करें

4. डाउनलोड की गई फ़ाइल का स्थान ढूंढें

इस मामले में, यह है /users/vincenttang

यहां छवि विवरण दर्ज करें

5. pgadmin से बैकअप पुनर्स्थापित करें

मान लिया कि आपने चरण 1 से 4 को सही ढंग से किया है, तो आपके पास एक पुनर्स्थापित बाइनरी फ़ाइल होगी। ऐसा समय आ सकता है जब आपका सहकर्मी आपकी पुनर्स्थापना फ़ाइल का उपयोग उनकी स्थानीय मशीन पर करना चाहता है। कहा है कि व्यक्ति पगडंडियों पर जाएँ और पुनर्स्थापित करें

डेटाबेस को राइटक्लॉक करके ऐसा करें -> "रिस्टोर" करें

यहां छवि विवरण दर्ज करें

6. फ़ाइल खोजक का चयन करें

मैन्युअल रूप से फ़ाइल स्थान का चयन करना सुनिश्चित करें, pgadmin में अपलोडर फ़ील्ड पर फ़ाइल को ड्रैग और ड्रॉप न करें। क्योंकि आप त्रुटि अनुमतियों में चलेंगे। इसके बजाय, आपके द्वारा बनाई गई फ़ाइल खोजें:

यहां छवि विवरण दर्ज करें

7. उक्त फाइल खोजें

आपको फ़िल्टर को बिल्कुल "सभी फ़ाइलों" में बदलना पड़ सकता है। उसके बाद फ़ाइल को चरण 4 से ढूंढें। अब पुष्टि करने के लिए सबसे नीचे "सिलेक्ट" बटन दबाएं

यहां छवि विवरण दर्ज करें

8. पुनर्स्थापित फ़ाइल कहा

आप इस पृष्ठ को फिर से देखेंगे, चयनित फ़ाइल के स्थान के साथ। आगे बढ़ो और इसे पुनर्स्थापित करें

यहां छवि विवरण दर्ज करें

9. सफलता

यदि सभी अच्छे हैं, तो नीचे दाईं ओर एक संकेतक को पॉपअप करना चाहिए जो एक सफल पुनर्स्थापना दिखा रहा है। आप यह देखने के लिए अपनी टेबल पर नेविगेट कर सकते हैं कि क्या डेटा को प्रत्येक टेबल पर उचित रूप से बहाल किया गया है।

10. यदि यह सफल नहीं था:

चरण 9 विफल होना चाहिए, अपने डेटाबेस पर अपने पुराने सार्वजनिक स्कीमा को हटाने का प्रयास करें। "क्वेरी टूल" पर जाएं

यहां छवि विवरण दर्ज करें

इस कोड ब्लॉक को निष्पादित करें:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

यहां छवि विवरण दर्ज करें

अब फिर से 5 से 9 तक कोशिश करें, यह काम करना चाहिए

EDIT - कुछ अतिरिक्त नोट्स। PGADMIN4 को अपडेट करें यदि आपको पुनर्स्थापना के दौरान "अभिलेखीय शीर्ष लेख 1.14 असमर्थित" की तर्ज पर कुछ के साथ अपलोड करने के दौरान कोई त्रुटि मिल रही है


3

यदि डेटाबेस में खुले कनेक्शन हैं, तो यह स्क्रिप्ट मदद कर सकती है। मैं हर रात लाइव-प्रोडक्शन डेटाबेस के बैकअप से एक परीक्षण डेटाबेस बनाने के लिए इसका उपयोग करता हूं। यह मानता है कि आपके पास उत्पादन db से एक .SQL बैकअप फ़ाइल है (मैं वेबमिन के भीतर ऐसा करता हूं)।

#!/bin/sh

dbname="desired_db_name_of_test_enviroment"
username="user_name"
fname="/path to /ExistingBackupFileOfLive.sql"

dropdbcmp="DROP DATABASE $dbname"
createdbcmd="CREATE DATABASE $dbname WITH OWNER = $username "

export PGPASSWORD=MyPassword



echo "**********"
echo "** Dropping $dbname"
psql -d postgres -h localhost -U "$username" -c "$dropdbcmp"

echo "**********"
echo "** Creating database $dbname"
psql -d postgres -h localhost -U "$username" -c "$createdbcmd"

echo "**********"
echo "** Loading data into database"
psql -d postgres -h localhost -U "$username" -d "$dbname" -a -f "$fname"

1

PgAdmin का उपयोग करके, उस डेटाबेस को डिस्कनेक्ट करें जिसे आप टेम्पलेट के रूप में उपयोग करना चाहते हैं। फिर आप इसे नए डेटाबेस बनाने के लिए टेम्पलेट के रूप में चुनते हैं, यह पहले से ही उपयोग में त्रुटि से बचा जाता है।


0

यदि आप संपूर्ण स्कीमा की प्रतिलिपि बनाना चाहते हैं, तो आप निम्नलिखित आदेश के साथ एक pg_dump बना सकते हैं:

pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password

और जब आप उस डंप का आयात करना चाहते हैं, तो आप उपयोग कर सकते हैं:

psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql

कनेक्शन स्ट्रिंग्स के बारे में अधिक जानकारी: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING

या फिर सिर्फ एक लाइनर में इसे मिलाते हुए:

pg_dump -h database.host.com -d postgres -n schema_name -U database_user --password | psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name”

0
  1. PgAdmin में मुख्य विंडो खोलें और फिर एक और क्वेरी टूल विंडो खोलें
  2. PgAdmin में मुख्य विंडो में,

उस "टेम्पलेटेड" डेटाबेस को डिस्कनेक्ट करें जिसे आप टेम्पलेट के रूप में उपयोग करना चाहते हैं।

  1. क्वेरी टूल विंडो को गोटो करें

नीचे दिए गए 2 प्रश्नों को चलाएं

SELECT pg_terminate_backend(pg_stat_activity.pid) 
    FROM pg_stat_activity 
    WHERE pg_stat_activity.datname = 'TemplateDB' AND pid <> pg_backend_pid(); 

(उपरोक्त एसक्यूएल स्टेटमेंट टेम्प्लेट डीबी के साथ सभी सक्रिय सत्रों को समाप्त कर देगा और फिर आप इसे नए टारगेटडीबी डेटाबेस बनाने के लिए टेम्प्लेट के रूप में चुन सकते हैं, यह पहले से ही उपयोग में त्रुटि होने से बचा जाता है।)

CREATE DATABASE 'TargetDB'
  WITH TEMPLATE='TemplateDB'
       CONNECTION LIMIT=-1;

-4

इसे इस्तेमाल करे:

CREATE DATABASE newdb WITH ENCODING='UTF8' OWNER=owner TEMPLATE=templatedb LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' CONNECTION LIMIT=-1;

gl XD

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.