postgresql
बैकअप और पुनर्स्थापना
खोज…
टिप्पणियों
pg_dumpall
और pg_dump
का उपयोग करने के बजाय फ़ाइल सिस्टम का बैकअप pg_dump
यह बहुत महत्वपूर्ण है कि यदि आप इसका उपयोग करते हैं, तो आप pg_start_backup()
फ़ंक्शन को पहले और pg_stop_backup()
फ़ंक्शन को कॉल करें। फाइलसिस्टम बैकअप करना सुरक्षित नहीं है अन्यथा; यहां तक कि उन फ़ंक्शन कॉल के बिना बैकअप सिस्टम का एक ZFS या FreeBSD स्नैपशॉट डेटाबेस को पुनर्प्राप्ति मोड में रखेगा और लेनदेन को खो सकता है।
मैं इस कारण से दोनों के लिए नियमित रूप से पोस्टग्रेज बैकअप के बजाय फाइलसिस्टम बैकअप करने से बचता हूं, और क्योंकि बैकअप फाइलें (विशेष रूप से कस्टम प्रारूप में) पोस्टग्रैज वैकल्पिक पुनर्स्थापनों का समर्थन करने में बेहद बहुमुखी हैं। चूंकि वे एकल फाइलें हैं, इसलिए उन्हें प्रबंधन करने में भी कम परेशानी नहीं है।
एक डेटाबेस का बैकअप लेना
pg_dump -Fc -f DATABASE.pgsql DATABASE
-Fc
"कस्टम बैकअप प्रारूप" का चयन करता है जो आपको कच्चे एसक्यूएल की तुलना में अधिक शक्ति देता है; अधिक विवरण के लिए pg_restore
देखें। यदि आप एक वेनिला SQL फ़ाइल चाहते हैं, तो आप इसके बजाय ऐसा कर सकते हैं:
pg_dump -f DATABASE.sql DATABASE
या और भी
pg_dump DATABASE > DATABASE.sql
बैकअप बहाल करना
psql < backup.sql
एक लेनदेन में पुनर्स्थापना को लपेटने के लिए एक सुरक्षित विकल्प -1
का उपयोग करता है। -f
शेल पुनर्निर्देशन का उपयोग करने के बजाय फ़ाइल नाम निर्दिष्ट करता है।
psql -1f backup.sql
डेटाबेस को निर्दिष्ट करने के लिए -d
विकल्प के साथ pg_restore
का उपयोग करके कस्टम प्रारूप फ़ाइलों को पुनर्स्थापित किया जाना चाहिए:
pg_restore -d DATABASE DATABASE.pgsql
कस्टम प्रारूप को SQL में भी बदला जा सकता है:
pg_restore backup.pgsql > backup.sql
कस्टम प्रारूप का उपयोग करने की अनुशंसा की जाती है क्योंकि आप चुन सकते हैं कि कौन सी चीजें पुनर्स्थापित करें और वैकल्पिक रूप से समानांतर प्रसंस्करण को सक्षम करें।
यदि आप एक पोस्टग्रेजिक रिलीज़ से एक नए में अपग्रेड करते हैं तो आपको एक pg_restore द्वारा pg_restore करने की आवश्यकता हो सकती है।
पूरे क्लस्टर का बैक अप लेना
$ pg_dumpall -f backup.sql
यह प्रत्येक डेटाबेस के लिए एक बार सर्वर से कई कनेक्शन बनाकर और pg_dump
पर pg_dump
निष्पादित करके पर्दे के पीछे काम करता है।
कभी-कभी, आप इसे क्रॉन जॉब के रूप में सेट करने के लिए लुभा सकते हैं, इसलिए आप यह देखना चाहते हैं कि फ़ाइल नाम के हिस्से के रूप में बैकअप लिया गया था:
$ postgres-backup-$(date +%Y-%m-%d).sql
हालांकि, कृपया ध्यान दें कि यह दैनिक आधार पर बड़ी फ़ाइलों का उत्पादन कर सकता है। Postgresql में नियमित रूप से बैकअप के लिए एक बेहतर तंत्र है - वाल अभिलेखागार
Pg_dumpall से आउटपुट एक पहचान-कॉन्फ़िगर किए गए पोस्टग्रेज उदाहरण के लिए पुनर्स्थापित करने के लिए पर्याप्त है, लेकिन $PGDATA
( pg_hba.conf
और postgresql.conf
) में कॉन्फ़िगरेशन फ़ाइलें बैकअप का हिस्सा नहीं हैं, इसलिए आपको उन्हें अलग से बैकअप लेना होगा।
postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();
फाइलसिस्टम बैकअप लेने के लिए, आपको यह सुनिश्चित करने के लिए इन कार्यों का उपयोग करना होगा कि पोस्टग्रेज सुसंगत स्थिति में है जबकि बैकअप तैयार किया गया है।
आयात करने के लिए प्रतिलिपि का उपयोग करना
किसी CSV फ़ाइल से तालिका में डेटा की प्रतिलिपि बनाने के लिए
COPY <tablename> FROM '<filename with path>';
user_data.csv
नामक फ़ाइल से तालिका user
में सम्मिलित करने के लिए अंदर /home/user/
:
COPY user FROM '/home/user/user_data.csv';
टेबल से अलग पाइप फ़ाइल से डेटा कॉपी करने के लिए
COPY user FROM '/home/user/user_data' WITH DELIMITER '|';
नोट: with delimiter
विकल्प के अभाव में, डिफ़ॉल्ट सीमांकक अल्पविराम है ,
फ़ाइल आयात करते समय हेडर लाइन को अनदेखा करना
हैडर विकल्प का उपयोग करें:
COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;
नोट: यदि डेटा उद्धृत किया गया है, तो डिफ़ॉल्ट डेटा उद्धरण वर्णों द्वारा दोहरे उद्धरण हैं। यदि डेटा किसी अन्य वर्ण का उपयोग करके उद्धृत किया गया है, तो QUOTE
विकल्प का उपयोग करें; हालाँकि, इस विकल्प को केवल CSV प्रारूप का उपयोग करने की अनुमति है।
निर्यात करने के लिए प्रतिलिपि का उपयोग करना
मानक ओ / पी पर तालिका की प्रतिलिपि बनाने के लिए
कॉपी <tablename> TO STDOUT (DELIMITER '|');
मानक ouput को तालिका उपयोगकर्ता निर्यात करने के लिए:
उपयोगकर्ता को STDOUT (DELIMITER '|');
फाइल करने के लिए टेबल कॉपी करें
COPY उपयोगकर्ता FROM '/ home / user / user_data' DELIMITER के साथ ';';
एसक्यूएल स्टेटमेंट के आउटपुट को फाइल में कॉपी करना
COPY (sql statement) '<फ़ाइलनाम से पथ>';
COPY (SELECT * FROM user WHERE user_name 'A%' को पसंद करें) TO '/ home / user / user_ata';
एक संपीड़ित फ़ाइल में कॉपी करने के लिए
उपयोगकर्ता को PROGRAM 'gzip> /home/user/user_data.gz';
यहाँ उपयोगकर्ता तालिका डेटा को संपीड़ित करने के लिए प्रोग्राम gzip निष्पादित किया जाता है।
डेटा निर्यात करने के लिए psql का उपयोग करना
डेटा को कॉपी कमांड या psql कमांड के कमांड लाइन विकल्पों का उपयोग करके निर्यात किया जा सकता है।
टेबल उपयोगकर्ता से सीएसवी फ़ाइल में सीएसवी डेटा निर्यात करने के लिए:
psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>
psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv
यहाँ -ए और -एफ का संयोजन चाल करता है।
-F
को सीमांकक निर्दिष्ट करना है
-A or --no-align
अन-असाइन किए गए आउटपुट मोड पर स्विच करता है। (डिफ़ॉल्ट आउटपुट मोड अन्यथा संरेखित है।)