सामग्री की तालिका
डेटाबेस को सूचीबद्ध करना
डेटाबेस को डंप करना
सभी डेटाबेस को डंप करना
डंप अनुदान
डेटाबेस को हटाना या छोड़ना
एक हटाएं अनुदान
डेटाबेस पुनर्स्थापित करें
अनुदान पुनर्स्थापित करें
PostgreSQL MySQL या MariaDB के लिए एक उत्कृष्ट वैकल्पिक डेटाबेस इंजन है, लेकिन उन डेटाबेस का प्रबंधन बहुत अलग है, खासकर उन सिस्टम प्रशासकों के लिए जो कमांड लाइन या PHPMyAdmin से MySQL का उपयोग करने के लिए बहुत उपयोग करते हैं। कई सीएमएस और एप्लिकेशन पहले से ही जानते हैं कि कैसे आउट ऑफ द पोस्टग्रेएसक्यूएल डेटाबेस के साथ इंटरैक्ट करना है, लेकिन MySQL की तरह, उन डेटाबेस को बनाए रखने के लिए अभी भी आप पर निर्भर हैं।
इस लेख के लिए, हम मान लेंगे कि आप अपने सर्वर में 'रूट' उपयोगकर्ता के रूप में एसएसएच-एड हैं, और डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ पोस्टग्रेएसक्यूएल सर्वर स्थापित किया है, जिसे 'पोस्टग्रेस' उपयोगकर्ता के रूप में कनेक्ट करने की आवश्यकता है। इसलिए, अधिकांश कमांड -U पोस्टग्रेज विकल्प भी अपनाएंगे। ये आदेश आम तौर पर अधिकांश आधुनिक संस्करणों में CentOS और Ubuntu के बीच समान होंगे, लेकिन मुख्य रूप से CentOS 7 VPS सर्वर और PostgreSQL 9.2 चलाने वाले Ubuntu 16.04 सर्वर पर परीक्षण किए गए थे।
डेटाबेस और अनुदान बनाना बल्कि जटिल है, लेकिन यदि आप cPanel, Plesk, या किसी अन्य नियंत्रण कक्ष का उपयोग करते हैं जो PostgreSQL एकीकरण का समर्थन करता है, तो इसे सेट करना सीधा है। कमांड लाइन से इन डेटाबेस और अनुदानों को बनाना इस विशेष लेख के दायरे से बाहर है, इसलिए हम यह भी मानेंगे कि आपके पास पहले से ही आपके डेटाबेस चल रहे हैं और उपयोग में हैं।
PostgreSQL में डेटाबेस की सूची बनाएं
यह उन डेटाबेस के सटीक नामों को जानने में मदद करता है जिन पर आप काम कर रहे हैं, साथ ही यह सुनिश्चित करने के लिए दोबारा जांच करें कि आप सही सर्वर पर काम कर रहे हैं। आइए पहले हमारी मशीन पर PostgreSQL डेटाबेस को सूचीबद्ध करें:psql -l -U postgres
इस कमांड का आउटपुट डेटाबेस नाम, मालिकों और एक्सेस विशेषाधिकारों की एक तालिका है। भविष्य के आदेशों के लिए डेटाबेस नामों का वर्णन करते समय हम पहले कॉलम से डेटा का उपयोग करेंगे। इस लेख के लिए, हम “database_name . नामक डेटाबेस का उपयोग करेंगे .
यदि आपको केवल डेटाबेस नामों की आवश्यकता है, और कोई अन्य जानकारी नहीं है, तो आप डेटाबेस नामों के लिए एक सटीक क्वेरी निष्पादित करके अतिरिक्त जानकारी को दूर कर सकते हैं:psql -U postgres -tA -c 'pg_database से डेटानाम चुनें;'
यह आदेश एक आदेश निष्पादित करता है ( -c . द्वारा वर्णित) ध्वज) डेटानाम . का चयन करने के लिए pg_database . का स्तंभ वैश्विक तालिका। -t ध्वज केवल टुपल्स (परिणाम पंक्तियों) को सूचीबद्ध करता है और शीर्षलेख और परिणाम गणना, और -A जैसे अतिरिक्त विवरणकों को छुपाता है ध्वज संरेखण को हटा देगा, प्रति पंक्ति एक डेटाबेस प्रिंट करेगा जिसमें नाम के आगे या पीछे कोई वर्ण नहीं होगा। डेटाबेस डंप के लिए लूप बनाने के लिए इस कमांड का आउटपुट विशेष रूप से उपयोगी है।
डेटाबेस को डंप करें
डंप कमांड एक डेटाबेस की पूरी कॉपी लेगा, जिसमें सभी टेबल, स्कीमा और डेटा शामिल है, और इसे एक ही संपीड़ित फ़ाइल में संग्रहीत करेगा:pg_dump -c -Fc -U postgres database_name> database_name.psql
इस आदेश के लिए कुछ महत्वपूर्ण झंडे हैं। -सी , या –साफ़ , बताता है pg_dump आउटपुट में DROP स्टेटमेंट जोड़ने के लिए, और -Fc , या –format=custom , pg_restore . के साथ उपयोग किए जाने वाले आउटपुट को संपीड़ित और व्यवस्थित करता है बाद में। कस्टम प्रारूप में सबसे अधिक लचीलापन है, और लाभप्रद रूप से बैकअप को एक फ़ाइल में भी संग्रहीत करता है।
सभी डेटाबेस डंप करें
उपरोक्त आदेश को कई बार चलाकर प्रत्येक डेटाबेस को अपनी फ़ाइल में लाने के लिए बेहतर होगा। हम अपने व्यक्तिगत डंप बनाने के लिए, कुछ अनावश्यक डेटाबेस को हटाते हुए, हमारे दूसरे लिस्टिंग कमांड का संदर्भ देंगे। grep -E -v "^(template1|template0|postgres)$"); करो
$db गूंज
pg_dump -c -Fc -U पोस्टग्रेज $db> $db.psql
किया गया
यह लूप के लिए डिफ़ॉल्ट टेम्प्लेट के अलावा सभी डेटाबेस की एक सूची पास करेगा और डेटाबेस को pg_dump में पोस्ट करेगा। .psql . बनाने का आदेश वर्तमान निर्देशिका में प्रत्येक के लिए फ़ाइल।
नोट:सभी डेटाबेस को एक फ़ाइल में डंप करना भी संभव है, हालांकि बड़े डेटा सेट के साथ, यह बोझिल हो सकता है और पुनर्स्थापित करना मुश्किल हो सकता है। इसलिए, मैं इस पद्धति की अनुशंसा नहीं करता, हालांकि यह कम जटिल है और कुछ स्थितियों में काम कर सकती है।
pg_dumpall --clean -U पोस्टग्रेज> pg.all.psql
अनुदान डंप करें
अनुदान PostgreSQL स्कीमा में संग्रहीत हैं। आप स्कीमा को डंप कर सकते हैं, जिससे सिस्टम के लिए सभी उपलब्ध अनुदान प्राप्त हो सकते हैं, pg_dump कमांड का उपयोग करके:pg_dumpall -U postgres -s> pg.schema.psql
यह न केवल अनुदान, बल्कि सर्वर के बाकी स्कीमा को भी डंप कर देगा, जिसमें डेटाबेस और टेबल क्रिएट स्टेटमेंट, स्वामित्व और भूमिका सदस्यता, और एसीएल आवंटन - मूल रूप से, डेटा को छोड़कर सब कुछ शामिल है।
यदि आपको केवल उपयोगकर्ताओं (भूमिकाओं) और अनुदानों की आवश्यकता है, तो आप इस आदेश का उपयोग करके उन्हें एकत्र कर सकते हैं:pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE'> pg.grants.psql
यह पूर्ण स्कीमा डंप का लाभ उठाता है लेकिन उपयोगकर्ताओं और अनुदानों को इकट्ठा करने के लिए केवल भूमिका निर्माण विवरण और अनुदान/निरस्त विवरण लेता है।
डेटाबेस हटाएं या छोड़ें
डेटाबेस को नष्ट करने के लिए, सिंटैक्स बहुत सीधा है। कृपया इस कमांड को टाइप करते समय सावधानी बरतें, क्योंकि यह आपको पुष्टि करने के लिए नहीं कहता है!psql -U postgres -c 'ड्रॉप डेटाबेस डेटाबेस_नाम'
यदि डेटाबेस मौजूद है, तो यह अब और नहीं होगा। इसी कार्य के लिए एक कमांड लाइन रैपर भी है:dropdb -U postgres database_name
अनुदान हटाएं
उपयोगकर्ताओं को रद्द करके अनुदान हटा दिए जाते हैं। सबसे पहले यह जानना महत्वपूर्ण है कि किसी विशिष्ट उपयोगकर्ता के पास क्या अनुदान है, तो आइए स्कीमा को डंप करके और हमारे उपयोगकर्ता से संबंधित पंक्तियों को ढूंढकर उनकी खोज करें।pg_dumpall -U postgres -s | egrep -e '^(निरस्त|अनुदान)' | grep database_user
मेरे मामले में, एक अनुदान है जो इस तरह दिखता है:डेटाबेस पर सभी डेटाबेस_नाम डेटाबेस_उपयोगकर्ता को दें;
इसका मुकाबला करने के लिए, हम उसी डिस्क्रिप्टर को रद्द कर देंगे:psql -U postgres -c 'डेटाबेस पर सभी डेटाबेस डेटाबेस_नाम से डेटाबेस_यूसर;'
नोट:मामूली बदलावों पर ध्यान दें, GRANT को REVOKE में बदल दिया गया है, और TO को FROM में बदल दिया गया है। इस कमांड को सिंगल कोट्स में लपेटा गया है और PostgreSQL में कमांड को निष्पादित करने के लिए -c फ्लैग के साथ psql को पास किया गया है।
यह मूल GRANT स्टेटमेंट को स्कीमा में REVOKE से बदल देगा। इस खंड में पहले कमांड को फिर से चलाना अब केवल वही लाइन दिखाता है जिसे हमने अभी पास किया है:डेटाबेस पर सभी को रद्द करें डेटाबेस_नाम से डेटाबेस_उपयोगकर्ता;
डेटाबेस पुनर्स्थापित करें
इस आलेख में प्रयुक्त pg_dump पद्धति का उपयोग करके डंप किए गए डेटाबेस के लिए, हम इस कमांड का उपयोग करके उस संपूर्ण डेटाबेस को पुनर्स्थापित कर सकते हैं:pg_restore -U postgres -c -C -O -d database_name database_name.psql
यहां कुछ और झंडों की जरूरत है! -सी या –साफ , पहले की तरह, फ़ाइल से PostgreSQL में लिखने से पहले डेटाबेस ऑब्जेक्ट को छोड़ देता है। हम इसे केवल तभी जोड़ते हैं जब इसका उपयोग डंप कमांड के लिए नहीं किया गया था। -सी , या -बनाएं , डेटाबेस डेटाबेस_नाम को पुनर्स्थापित करने के दौरान बना देगा यदि यह मौजूद नहीं है। यदि डेटाबेस पहले से मौजूद है, तो -c झंडा -C . से पहले इसे नष्ट कर देगा इसे पुन:बनाता है। इसके बाद, -O . है , या –कोई मालिक नहीं , जो मालिक को डेटाबेस से हटा देता है। यह किसी भी स्रोत से बैकअप को पुनर्स्थापित करने वाले उपयोगकर्ता के मालिक को बदलने की अनुमति देता है, जो हमारे मामले में पोस्टग्रेज है। -डी डेटाबेस_नाम उस डेटाबेस के नाम का वर्णन करता है जिसे आप पुनर्स्थापित करेंगे। यदि आवश्यक हो, तो यह उस नाम से भिन्न नाम हो सकता है जिससे बैकअप बनाया गया था। अंतिम तर्क हमारी बैकअप फ़ाइल का नाम है, database_name.psql ।
अनुदान पुनर्स्थापित करें
चूंकि सभी अनुदान हमारी pg.grants.psql फ़ाइल में संग्रहीत हैं, हमें केवल उस उपयोगकर्ता का चयन करने की आवश्यकता है जिसे हमें पुनर्स्थापित करने की आवश्यकता है। हमारे मामले में, हम database_user को पुनर्स्थापित करेंगे:grep database_user pg.grants.psql | psql -U पोस्टग्रेज करता है
चूंकि pg.grants.psql फ़ाइल में भूमिकाएँ और अनुदान हैं, यह कमांड उपयोगकर्ता को उसके मूल विशेषाधिकारों और पासवर्ड के साथ फिर से बनाएगी, और फिर आवश्यक डेटाबेस और स्कीमा तक उसकी पहुँच प्रदान करेगी।