कमांड लाइन का उपयोग कर एक पोस्टग्रेज बैकअप फ़ाइल को पुनर्स्थापित करें?


294

मैं postgresql के लिए नया हूं, और स्थानीय रूप से, मैं pgadmin3 का उपयोग करता हूं। रिमोट सर्वर पर, हालांकि, मेरे पास ऐसा कोई लक्जरी नहीं है।

मैंने पहले ही डेटाबेस का बैकअप बना लिया है और इसे कॉपी कर लिया है, लेकिन, क्या कमांड लाइन से बैकअप बहाल करने का कोई तरीका है? मैं केवल GUI या pg_dumps से संबंधित चीजें देखता हूं, इसलिए, अगर कोई मुझे बता सकता है कि इस बारे में कैसे जाना है, तो यह बहुत अच्छा होगा!

जवाबों:


366

डंप फ़ाइल को कैसे बनाया जाता है, इसके आधार पर देखने के लिए दो उपकरण हैं।

आपके संदर्भ का पहला स्रोत मैन पेज होना चाहिए pg_dump(1)क्योंकि यही डंप बनाता है। इसे कहते हैं:

डंप स्क्रिप्ट या संग्रह फ़ाइल स्वरूपों में आउटपुट हो सकते हैं। स्क्रिप्ट डंप सादा-पाठ फाइलें हैं जिसमें SQL कमांड्स को डेटाबेस को उस स्थिति में फिर से जोड़ने के लिए आवश्यक था जो उस समय बचा था। ऐसी स्क्रिप्ट से पुनर्स्थापित करने के लिए, इसे psql (1) को खिलाएं। अन्य मशीनों और अन्य आर्किटेक्चर पर भी डेटाबेस को फिर से बनाने के लिए स्क्रिप्ट फ़ाइलों का उपयोग किया जा सकता है; अन्य एसक्यूएल डेटाबेस उत्पादों पर भी कुछ संशोधनों के साथ।

डेटाबेस के पुनर्निर्माण के लिए pg_restore (1) के साथ वैकल्पिक संग्रह फ़ाइल स्वरूपों का उपयोग किया जाना चाहिए। वे pg_restore के बारे में चयनात्मक होने की अनुमति देते हैं कि क्या पुनर्स्थापित किया जाता है, या यहां तक ​​कि आइटम को पुनर्स्थापित करने से पहले पुनर्स्थापित करने के लिए। आर्काइव फ़ाइल फॉर्मेट्स को आर्किटेक्चर में पोर्टेबल होने के लिए डिज़ाइन किया गया है।

तो जिस तरह से इसे बाहर डंप किया गया था उस पर निर्भर करता है। आप शायद इसे उत्कृष्ट file(1)कमांड का उपयोग करके समझ सकते हैं - यदि इसमें एएससीआईआई पाठ और / या एसक्यूएल का उल्लेख है, तो इसे साथ बहाल किया psqlजाना चाहिए अन्यथा आपको शायद उपयोग करना चाहिएpg_restore

बहाल करना बहुत आसान है:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

या

pg_restore -U username -d dbname -1 filename.dump

उनके संबंधित मैनपेज़ देखें - बहुत कुछ विकल्प हैं जो प्रभावित करते हैं कि पुनर्स्थापना कैसे काम करती है। आपको अपने "लाइव" डेटाबेस को साफ करना होगा या पुनर्स्थापित करने से पहले टेम्पलेट 0 (जैसा कि टिप्पणी में बताया गया है) से उन्हें फिर से बनाना होगा, यह इस बात पर निर्भर करता है कि डंप कैसे उत्पन्न हुए थे।


3
IME आप व्यावहारिक रूप से हमेशा एक डेटाबेस में पुनर्स्थापित करना चाहते हैं जो टेम्पलेट0 से नया बनाया गया है। अन्यथा यदि आपने टेम्पलेट 1 में plpgsql को सक्रिय करने जैसा कुछ किया है, तो पुनर्स्थापना प्रक्रिया इसे फिर से करने का प्रयास करेगी, और आपके द्वारा सुझाए गए -1 स्विच का अर्थ है कि संपूर्ण लेनदेन विफल हो जाएगा। तो कुछ "seb -T template0 seo2" जैसे "pg_restore -v -d seo2 seo.pg" के बाद seo.pg (seo डेटाबेस से निर्मित) को एक नए seo2 डेटाबेस में पुन: स्थापित करने के लिए। यदि आपकी बैकअप फ़ाइल सिर्फ एक .sql फ़ाइल है, तो आप इसे परस्पर विरोधी बिट्स को हाथ से ट्रिम कर सकते हैं।
araqnid

61
आपके पास -dऔर -fएक ही समय में नहीं हो सकता । pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner

8
9.2 संस्करण में "-f" विकल्प एक आउटपुट फ़ाइल को निर्दिष्ट करता है, डंप फ़ाइल को नहीं (और शायद यह पहले के संस्करणों में भी इसका मतलब है)।
डेविड रेसनिक

4
के बारे में cannot be used together, यहाँ देखें: stackoverflow.com/questions/27882070/…
अब्दुल

3
@ एलेक्स78191 इसका मतलब है कि यह एक एकल लेनदेन के रूप में निष्पादित होता है, जो पूरी तरह से विफल और रोलबैक हो सकता है, या गुजर सकता है। यह डेटाबेस तक कुछ पहुंच को भी अवरुद्ध करेगा।
एटीएन

216

बैकअप बनाना

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c कस्टम प्रारूप है (संपीड़ित, और -j N के समानांतर में करने में सक्षम) -b बूँद सहित है, -v क्रिया है, -f बैकअप फ़ाइल का नाम है

बैकअप से बहाल करना

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

स्थानीय सेट करने के लिए महत्वपूर्ण है - विकल्प


2
मैं यह उल्लेख करना चाहूंगा कि इन आदेशों को निष्पादित करने से पहले आपको Posgresql बिन फ़ोल्डर में स्थित होना चाहिए । उदाहरण के लिए विंडोज में (यदि आपने इसे डिफ़ॉल्ट फ़ोल्डर में स्थापित किया है) यह C: \ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl

90

postgresडेटाबेस पर पूर्ण विशेषाधिकार प्राप्त करने के लिए आपको लॉग इन करने की आवश्यकता हो सकती है ।

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

स्विच -Fबैकअप फ़ाइल का स्वरूप निर्दिष्ट करें:

  • c कस्टम PostgreSQL प्रारूप का उपयोग करेगा जो संकुचित है और सबसे छोटी बैकअप फ़ाइल आकार में परिणाम है
  • d निर्देशिका के लिए जहां प्रत्येक फ़ाइल एक तालिका है
  • t TAR संग्रह के लिए (कस्टम प्रारूप से बड़ा)
  • -h/ --hostउस मशीन का होस्ट नाम निर्दिष्ट करता है जिस पर सर्वर चल रहा है
  • -W/ --passwordफोर्स pg_dumpपासवर्ड के लिए शीघ्र करने के लिए एक डेटाबेस से कनेक्ट करने से पहले

बैकअप बहाल:

   pg_restore -d database_name -U username -C backup.dump

पैरामीटर -Cको डेटा आयात करने से पहले डेटाबेस बनाना चाहिए। अगर यह काम नहीं करता है तो आप हमेशा डेटाबेस बना सकते हैं उदा। कमांड के साथ (उपयोगकर्ता postgresया अन्य खाते जिसमें डेटाबेस बनाने के अधिकार हैं)createdb db_name -O owner

pg_dump / psql

उस स्थिति में, जब आपने तर्क को स्पष्ट नहीं किया था कि -Fडिफ़ॉल्ट सादा पाठ एसक्यूएल प्रारूप का उपयोग किया गया था (या साथ -F p)। तब आप उपयोग नहीं कर सकते pg_restore। आप के साथ डेटा आयात कर सकते हैं psql

बैकअप:

pg_dump -U username -f backup.sql database_name

बहाल:

psql -d database_name -f backup.sql

मैंने DigitalOcean पर dokku से डंप किए गए डेटाबेस को पुनर्स्थापित करने के लिए "psql -d database_name -f backup.sql" कमांड का उपयोग किया। बढ़िया काम किया।
NineBlindEyes

1
Psql का उपयोग करते समय यदि आपके उपयोगकर्ता (उदाहरण के लिए postgres) के पास पासवर्ड सेट है तो -Wविकल्प का उपयोग किया जाना चाहिए। उदाहरण के लिए, उबंटू पर su postgresटर्मिनल से कहीं भी किए बिना $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlवह कमांड है जिसने मेरे लिए अपने लोकलहोस्ट पर बैकअप को बहाल करने के लिए काम किया। ध्यान दें कि -hविकल्प की आवश्यकता है।
जिग्नेश गोहेल

@JiggneshhGohel जैसा कि मैनुअल कहता है: -Wविकल्प कभी आवश्यक नहीं होता है। pg_dumpयदि सर्वर पासवर्ड प्रमाणीकरण की मांग करता है तो स्वचालित रूप से एक पासवर्ड के लिए संकेत देगा। PGPASSWORDयदि आप सादा-पाठ पासवर्ड का उपयोग कर रहे हैं, तो भी आप एनवी चर का उपयोग कर सकते हैं। -hयदि डिफ़ॉल्ट PGHOSTलागू नहीं है , तो इसकी आवश्यकता है। ये विकल्प कई PostgreSQL बर्तनों के लिए आम हैं, इस प्रकार इस प्रश्न का उत्तर देने के लिए आवश्यक नहीं है (यह आपके सेटअप पर बहुत निर्भर करता है)।
टॉमबार्ट

@ अपना दूसरा विकल्प pg_dump/psqlभाग मेरे लिए काम है। लेकिन 1 हिस्सा pg_dump/pg_restoreबहाल करने के लिए मेरे लिए काम नहीं कर रहा है। धन्यवाद।
अंजन विश्वास

@AnjanBiswas पहला विकल्प संपीड़ित संग्रह का उपयोग कर रहा है, जिसमें अधिक CPU की आवश्यकता होगी, लेकिन बैकअप फ़ाइल डिस्क पर कम जगह घेरेगी। आपको बस उपयुक्त संपीड़न चुनने की आवश्यकता है-Fc
टॉमबार्ट

60

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

यूजर पासवर्ड डालें और एंटर दबाएं।

पुनर्स्थापित करें:

psql -U user db_name < /directory/archive.sql

यूजर पासवर्ड डालें और एंटर दबाएं।


31

नीचे मेरा संस्करण है pg_dumpजिसका उपयोग मैं डेटाबेस को पुनर्स्थापित करने के लिए करता हूं:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

या उपयोग psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

जहाँ -hहोस्ट, -pपोर्ट, -uलॉगिन यूज़रनेम, -dडेटाबेस का नाम


2
गोविंद सिंह, आपने मेरे उत्तर को संपादित क्यों किया? आपके परिवर्तन कुछ भी नया नहीं लाते हैं
याहोर एम

1
my_new_databaseउपयोग करते समय पहले से ही मौजूद होना चाहिए psql, नहीं?
Elmex80s

22

बैकअप और GZIP के साथ बहाल

बड़े आकार के डेटाबेस के लिए यह बहुत अच्छा है

बैकअप

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

बहाल

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html


1
Ubuntu के लिए आप उपयोग कर सकते हैं: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlडेटाबेस पर काम करने की अनुमति प्राप्त करने के लिए। --cleanडंपिंग करते समय ध्वज पर भी विचार करें , जो सभी मौजूदा डेटा को मिटा देगा, काम आ सकता है।
सेबेस्टियन

मेरे लिए महान और स्वच्छ समाधान का काम करना। धन्यवाद!
नाम जी वीयू



7

1. टर्मिनल को बंद करें।

2. निम्नलिखित आदेश के साथ अपने डेटाबेस में वापसी

आपके पोस्ट-बिन - /opt/PostgreSQL/9.1/bin/

आपका स्रोत डेटाबेस सर्वर - 192.168.1.111

आपकी बैकअप फ़ाइल का स्थान और नाम - /home/dinesh/db/mydb.backup

आपका स्रोत db नाम - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password --format custom --blobs --file / home / dinesh / db / mydb.backup "" mydatabase "

3. गंतव्य में mydb.backup फ़ाइल को पुनर्स्थापित करें।

आपका गंतव्य सर्वर - लोकलहोस्ट

आपके गंतव्य डेटाबेस का नाम - mydatabase

बैकअप को पुनर्स्थापित करने के लिए डेटाबेस बनाएँ।

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U पोस्टग्रेज -सी "क्रिएट डबस्ट माइडेटाबेस"

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

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "घर / dinesh / db / mydb। बैकअप "


4

यदि आप pg_dump का उपयोग करके बैकअप बनाते हैं, तो आप इसे निम्न तरीके से आसानी से पुनर्स्थापित कर सकते हैं:

  1. कमांड लाइन विंडो खोलें
  2. Postgres bin folder पर जाएं। उदाहरण के लिए: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. अपने डेटाबेस को पुनर्स्थापित करने के लिए कमांड दर्ज करें। For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. अपने पोस्टग्रेज उपयोगकर्ता के लिए पासवर्ड टाइप करें
  5. पुनर्स्थापना प्रक्रिया की जाँच करें

4

1) खुला psql टर्मिनल।

2) डंप फ़ाइल खोलना / खोलना।

3) एक खाली डेटाबेस बनाएँ।

4) .dump फ़ाइल को पुनर्स्थापित करने के लिए निम्न कमांड का उपयोग करें

<database_name>-# \i <path_to_.dump_file>


3

नीचे दिए गए लिंक के अनुसार, आप डंप फ़ाइल को पुनर्स्थापित करने के लिए psql कमांड का उपयोग कर सकते हैं:

https://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE

psql dbname < infile

यदि आपको उपयोगकर्ता नाम सेट करने की आवश्यकता है तो कमांड के बाद उपयोगकर्ता नाम जोड़ें जैसे:

psql dbname < infile username


2

पोस्टग्रेज बैकअप फ़ाइल को पुनर्स्थापित करना इस बात पर निर्भर करता है कि आपने पहले स्थान पर बैकअप कैसे लिया।

यदि आपने pg_dump के साथ -F c या -F d का उपयोग किया है तो आपको pg_restore का उपयोग करने की आवश्यकता है अन्यथा आप बस उपयोग कर सकते हैं

psql -h लोकलहोस्ट -p 5432 -U पोस्टग्रेस <बैकअपफाइल

9 तरीके बैकअप और पुनर्स्थापित करने के लिए डेटाबेस


क्या आपको एहसास है कि आपने डेटाबेस नाम भाग को याद किया है और यह गंतव्य डेटाबेस के बारे में शिकायत करेगा जो मौजूद नहीं है?
पेरे

2

यह देखने की कोशिश करें कि क्या निम्न कमांड आपकी मदद कर सकते हैं:

sudo su - yourdbuser
psql
\i yourbackupfile

2

नेक्रोपोस्ट के लिए क्षमा करें, लेकिन ये समाधान मेरे लिए काम नहीं करते थे। मैं Postgres 10. लिनक्स पर हूँ:

  1. मुझे निर्देशिका को अपने pg_hba.conf में बदलना पड़ा।
  2. मुझे यहां बताए अनुसार सहकर्मी से md5 में विधि बदलने के लिए फ़ाइल को संपादित करना था
  3. सेवा को पुनरारंभ करें: service postgresql-10 restart
  4. निर्देशिका बदलें जहां मेरे backup.sql स्थित था और निष्पादित करें:
    psql postgres -d database_name -1 -f backup.sql

    -database_name मेरे डेटाबेस का नाम है

    -backup.sql मेरी .sql बैकअप फ़ाइल का नाम है।


1

मुझे pg_dump चलाने में प्रमाणीकरण समस्याएँ हो रही थीं, इसलिए मैंने अपनी डंप फ़ाइल स्थानांतरित कर दी

mv database_dump /tmp

अस्थायी निर्देशिका में और फिर भाग गया

su -u postgres
cd /tmp
pg_restore database_dump

यदि आपके पास एक बड़ा डेटाबेस डंप है, तो आप बस एक और निर्देशिका बनाना चाह सकते हैं, जहाँ आपका वर्तमान उपयोगकर्ता और उपयोगकर्ता पोस्टग्रेज उपयोगकर्ता तक पहुँच सकते हैं और डेटाबेस डंप फ़ाइल को उसमें डाल सकते हैं।


1

अगर आपके पास बैकअप एसक्यूएल फाइल है तो आप इसे आसानी से रिस्टोर कर सकते हैं। बस नीचे दिए गए निर्देशों का पालन करें

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

जरूरत पड़ने पर अपने पोस्टग्रेज यूजर के लिए पासवर्ड टाइप करें और पोस्टग्रेज को अपना काम करने दें। तब आप पुनर्स्थापना प्रक्रिया की जांच कर सकते हैं।


0

यदि आप अपने डेटा का बैकअप लेना चाहते हैं या बैकअप से डेटा को पुनर्स्थापित करना चाहते हैं, तो आप निम्न कमांड चला सकते हैं:

  1. अपने डेटा का बैकअप बनाने के लिए, अपने postgres \ bin \ डायरेक्टरी की तरह जाएं C:\programfiles\postgres\10\bin\और फिर निम्न कमांड टाइप करें:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. किसी बैकअप से डेटा को पुनर्स्थापित करने के लिए, अपने पोस्टग्रेज \ बिन \ डायरेक्टरी पर जाएं C:\programfiles\postgres\10\bin\और फिर कमांड के नीचे टाइप करें:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    कृपया सुनिश्चित करें कि बैकअप फ़ाइल मौजूद है।


-3

नीचे देखें इसका काम

C: / प्रोग्राम फाइल्स / पोस्टग्रेएसक्यूएल / 9.4 / बिन \ pg_restore.exe --होस्ट लोकलहोस्ट - 5432-username "postgres" --dbname "newDatabase" --no-password --verbose

" C: \ Users \ योगेश \ डाउनलोड \ नया डाउनलोड \ DB.backup "

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