PostgreSQL 13, Postgres डेटाबेस सॉफ़्टवेयर की नवीनतम रिलीज़, कई अंडर-द-हूड सुधारों के साथ आता है। सबसे लोकप्रिय और बहुमुखी ओपन-सोर्स RDBMS होने के बावजूद, इसे सेटअप करना और आरंभ करना सबसे आसान नहीं है। यह जानने के लिए पढ़ें कि आप उबंटू सर्वर के नवीनतम एलटीएस संस्करण पर पोस्टग्रेस के नवीनतम संस्करण के साथ कैसे जा सकते हैं।
इंस्टॉलेशन
Ubuntu 20.04 अपने ब्रह्मांड . से Postgres 12 के साथ आता है भंडार। चूंकि हम संस्करण 13 चाहते हैं, हम सीधे PostgreSQL प्रोजेक्ट के आधिकारिकAPT रिपॉजिटरी का उपयोग कर सकते हैं। इस रिपॉजिटरी में Ubuntu 20.04 के लिए बायनेरिज़ हैं, और इसमें विभिन्न एक्सटेंशन के पैकेज भी शामिल हैं जिन्हें आप बाद में इंस्टॉल करना चाहते हैं।
आइए इस तरह से रिपॉजिटरी सेट करें (ध्यान दें कि "फोकल" उबंटू 20.04 का कोड नाम है):
# add the repository
sudo tee /etc/apt/sources.list.d/pgdg.list <<END
deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main
END
# get the signing key and import it
wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo apt-key add ACCC4CF8.asc
# fetch the metadata from the new repo
sudo apt-get update
अब हम PostgreSQL सर्वर और अन्य कमांड-लाइन टूल का उपयोग करके स्थापित कर सकते हैं:
sudo apt-get install -y postgresql-13
स्थापना कुछ चीजें करती है:
- यह PostgreSQL सर्वर, उपयोगिताओं और एक कमांड-लाइन क्लाइंट को स्थापित करता है जिसेpsql . कहा जाता है ।
- यह एक Linux सिस्टम उपयोगकर्ता बनाता है जिसे पोस्टग्रेज . कहा जाता है . सभी डेटा फ़ाइलें इस उपयोगकर्ता के स्वामित्व में हैं, और सभी प्रक्रियाएं इस उपयोगकर्ता के रूप में चलती हैं।
- यह एक डेटाबेस क्लस्टर बनाता है (नीचे देखें)। इस क्लस्टर में, यह डेटाबेस बनाता है, जिसे पोस्टग्रेज . भी कहा जाता है ।
- यह एक PostgreSQL उपयोगकर्ता बनाता है (नहीं Linux सिस्टम उपयोगकर्ता), जिसेपोस्टग्रेज़ . भी कहा जाता है . इस PostgreSQL उपयोगकर्ता के पास सुपरयुसर विशेषाधिकार हैं।
आप देख सकते हैं कि यह भ्रमित होने लगा है!
डेटाबेस क्लस्टर
पोस्टग्रेज के संदर्भ में, अब हमारे पास एक एकल डेटाबेस क्लस्टर है जो ऊपर और चल रहा है। एकल डेटाबेस क्लस्टर में एक या अधिक डेटाबेस हो सकते हैं। डेटाबेसक्लस्टर में जो अब हमारे पास है, एक डेटाबेस है जिसे "पोस्टग्रेज" कहा जाता है। (कुछ "टेम्पलेट" डेटाबेस भी हैं जिन्हें हम अभी के लिए अनदेखा कर सकते हैं।)
एक डेटाबेस क्लस्टर को एक मुख्य पोस्टग्रेज प्रक्रिया द्वारा प्रबंधित किया जाता है जिसे पोस्टमास्टर . कहा जाता है .यह विभिन्न बाल प्रक्रियाओं को जन्म देता है जो या तो विभिन्न सिस्टम कार्य करता है या आने वाले क्लाइंट कनेक्शन को संभालता है। वर्तमान में चल रही प्रक्रियाओं पर एक नज़र डालें:
alice@ubu:~$ ps -o uname,pid,ppid,cmd -H -U postgres
USER PID PPID CMD
postgres 4880 1 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf
postgres 4882 4880 postgres: 13/main: checkpointer
postgres 4883 4880 postgres: 13/main: background writer
postgres 4884 4880 postgres: 13/main: walwriter
postgres 4885 4880 postgres: 13/main: autovacuum launcher
postgres 4886 4880 postgres: 13/main: stats collector
postgres 4887 4880 postgres: 13/main: logical replication launcher
यहां पोस्टमास्टर प्रक्रिया 4880 है और इसने 6 बाल प्रक्रियाओं को जन्म दिया है जो विभिन्न हाउसकीपिंग गतिविधियों को संभालती हैं। आप क्लस्टर का स्थान भी देख सकते हैं (/var/lib/postgresql/13/main
) और कॉन्फ़िगरेशन फ़ाइल का स्थान (/etc/postgresql/13/main/postgresql.conf
)।
रीलोडिंग और रीस्टार्टिंग
कई बार, आपको पुनः लोड करने की आवश्यकता हो सकती है या पुनरारंभ करें आपका पोस्टग्रेज़ सर्वर। रीलोडिंग के कारण पोस्टग्रेज़ इसकी कॉन्फ़िगरेशन फ़ाइलों की फिर से जाँच करता है और परिवर्तनों को लागू करता है। यदि कॉन्फ़िगरेशन फ़ाइलों में कोई परिवर्तन नहीं होता है, तो कुछ भी बुरा नहीं होता है। पुनः लोड करने से वर्तमान में कनेक्टेड क्लाइंट परेशान नहीं होते हैं। अपने पोस्टग्रेज सर्वर को पुनः लोड करने के लिए, आप यह कर सकते हैं:
sudo systemctl reload postgresql
कुछ कॉन्फ़िगरेशन परिवर्तन आपके सर्वर को पुनरारंभ करने के बाद ही प्रभावी होंगे। यह अधिक विघटनकारी है और सभी कनेक्टेड क्लाइंट को डिस्कनेक्ट कर देगा। पुनः आरंभ करने के लिए, आप कर सकते हैं:
sudo systemctl restart postgresql
लॉग फ़ाइलें
जैसा कि आप देख सकते हैं, एक systemd सेवा है जिसे postgresql
. कहा जाता है जिसका उपयोग आप पोस्टमास्टर को नियंत्रित करने के लिए कर सकते हैं। यदि सेवा प्रारंभ नहीं होती है, तो आप त्रुटि संदेशों की जांच के लिए इसकी स्थिति की जांच कर सकते हैं:
alice@ubu:~$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Thu 2020-10-29 04:52:29 UTC; 25min ago
Main PID: 4557 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 1075)
Memory: 0B
CGroup: /system.slice/postgresql.service
Oct 29 04:52:29 ubu systemd[1]: Starting PostgreSQL RDBMS...
Oct 29 04:52:29 ubu systemd[1]: Finished PostgreSQL RDBMS.
PostgreSQL सर्वर एक लॉग फ़ाइल लिखता है, जिसे आप अधिक विस्तृत त्रुटि संदेशों के लिए जाँच सकते हैं। यह फ़ाइल /var/log/postgresql/postgresql-13-main.log
पर स्थित है :
alice@ubu:~$ cat /var/log/postgresql/postgresql-13-main.log
2020-10-29 04:52:34.096 UTC [4880] LOG: starting PostgreSQL 13.0 (Ubuntu 13.0-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0, 64-bit
2020-10-29 04:52:34.097 UTC [4880] LOG: listening on IPv4 address "127.0.0.1", port 5432
2020-10-29 04:52:34.099 UTC [4880] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-10-29 04:52:34.106 UTC [4881] LOG: database system was shut down at 2020-10-29 04:52:31 UTC
2020-10-29 04:52:34.112 UTC [4880] LOG: database system is ready to accept connections
अपने पोस्टग्रेज सर्वर से कनेक्ट करना
अब जब हमारा सर्वर चालू हो गया है, तो आइए इससे जुड़ने का प्रयास करें। डिफ़ॉल्ट रूप से, सर्वर केवल इसके लिए सुनता है:
- पोर्ट 5432 पर 127.0.0.1 से टीसीपी कनेक्शन, और
- /var/run/postgresql में यूनिक्स डोमेन सॉकेट
डिफ़ॉल्ट कॉन्फ़िगरेशन के कारण, सर्वर से अभी कनेक्ट करने का एकमात्र तरीका यूनिक्स सॉकेट के माध्यम से एक प्रक्रिया है जो सिस्टम उपयोगकर्ता के रूप में चल रही है पोस्टग्रेज . आइए मानक इंटरैक्टिव क्लाइंट psql चलाएं इस तरह:
alice@ubu:~$ sudo -u postgres psql postgres
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.
postgres=#
यहाँ हम सिस्टम उपयोगकर्ता पोस्टग्रेज़ ("sudo -u postgres psql") के रूप में psql चला रहे हैं और "postgres" नामक डेटाबेस से कनेक्ट कर रहे हैं (कमांड-लाइन पर अंतिम "postgres")। "postgres=#" प्रॉम्प्ट इंगित करता है कि वर्तमान में कनेक्टेड डेटाबेस का नाम ("पोस्टग्रेज") और यह कि हमारे पास सुपरयूज़र विशेषाधिकार हैं ("$" के विपरीत "#")।
कनेक्शन यूनिक्स सॉकेट के माध्यम से हुआ (यह psql में डिफ़ॉल्ट विधि है)। चूंकि डिफ़ॉल्ट रूप से पोस्टग्रेज़ उपयोगकर्ता के पास पासवर्ड नहीं होता है और डिफ़ॉल्ट कॉन्फ़िगरेशन के लिए टीसीपी कनेक्शन के लिए पासवर्ड प्रमाणीकरण की आवश्यकता होती है, अभी 127.0.0.1:5432 से अधिक कनेक्ट करना संभव नहीं है ।
आंतरिक नेटवर्क से आने वाले कनेक्शनों को अनुमति देना
आइए पहले आंतरिक नेटवर्क से कनेक्शन की अनुमति देने के लिए कॉन्फ़िगरेशन बदलें। मान लें कि इस नेटवर्क पर हमारे सर्वर का आईपी 10.1.2.3 है, हम मुख्य कॉन्फ़िगरेशन फ़ाइल को /etc/postgresql/13/main/postgresql.conf
पर संपादित कर सकते हैं। और पंक्तियाँ बदलें:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
करने के लिए:
listen_addresses = 'localhost,10.1.2.3'
हमें इन नेटवर्क से आने वाले कनेक्शन के लिए पासवर्ड प्रमाणीकरण का उपयोग करने के लिए पोस्टग्रेस को भी बताना होगा। इसके लिए, /etc/postgresql/13/main/pg_hba.conf
नामक एक अन्य कॉन्फ़िगरेशन फ़ाइल संपादित करें और लाइन बदलें:
host all all 127.0.0.1/32 md5
करने के लिए:
host all all 127.0.0.1/32 scram-sha-256
host all all 10.1.0.0/16 scram-sha-256
(मान लें कि आंतरिक नेटवर्क 10.1.0.0/16 है।)
हमने डिफ़ॉल्ट md5
. को भी बदल दिया है नए और अधिक सुरक्षित के लिए विधिscram-sha-256
. md5
. की अन्य सभी घटनाएं फ़ाइल में scram-sha-256
. से भी बदला जाना चाहिए . यदि आपका एप्लिकेशन या डेटाबेस ड्राइवर इस पद्धति का समर्थन नहीं करता है, तो md5
. का उपयोग करना जारी रखें इसके बजाय विधि।
इन परिवर्तनों को प्रभावी होने के लिए, आपको सर्वर को पुनरारंभ करना होगा:
sudo systemctl restart postgresql
एक नियमित उपयोगकर्ता और डेटाबेस बनाना
हम लगभग वहाँ हैं!
अब हम एक नियमित उपयोगकर्ता बना सकते हैं जिसे हमारा एप्लिकेशन कनेक्ट कर सकता है, और एक डेटाबेस जिस पर उसका पूर्ण नियंत्रण है। सुपरयूज़र के रूप में कनेक्ट करें पोस्टग्रेज़ ऐसा करने के लिए स्थानीय रूप से सर्वर मशीन से:
alice@ubu:~$ sudo -u postgres psql postgres
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
Type "help" for help.
postgres=# SET password_encryption = 'scram-sha-256';
SET
postgres=# CREATE USER alice PASSWORD 's3cr3tp@ss';
CREATE ROLE
postgres=#
(यदि आप md5
. का उपयोग करना चाहते हैं तो पहले कमांड को छोड़ दें इसके बजाय।) इसने एलिस . नामक एक उपयोगकर्ता बनाया पासवर्ड के साथ s3cr3tp@ss . आइए एक डेटाबेस भी बनाएं जिसका मालिक इस उपयोगकर्ता के पास होगा:
postgres=# CREATE DATABASE app1 OWNER alice;
CREATE DATABASE
postgres=#
डेटाबेस को app1 . कहा जाता है . चूंकि ऐलिस इस डेटाबेस का मालिक है, डेटाबेस के भीतर सभी संचालन (जैसे टेबल बनाना, पंक्तियाँ सम्मिलित करना) की अनुमति है यदि एप्लिकेशन उपयोगकर्ता के रूप में कनेक्ट होता है alice ।
आइए एलिस . के रूप में कनेक्ट करने का प्रयास करें , नेटवर्क पर:
~$ psql -h 10.1.2.3 -U alice app1
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
app1=>
ठंडा! अब हम डेटाबेस से जुड़े हैं app1 उपयोगकर्ता के रूप में एलिस ।
डेटाबेस हटाना, बैकअप लेना और पुनर्स्थापित करना
यहां कुछ तरकीबें दी गई हैं जो आपके पोस्टग्रेसर के साथ काम करना जारी रखने में आपकी मदद कर सकती हैं:
डेटाबेस को हटाना
आप अपने द्वारा अभी बनाए गए डेटाबेस ("app1") को इस तरह से हटा सकते हैं:
alice@ubu:~$ psql -h 127.0.0.1 -U alice app1
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
app1=> \c postgres
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
You are now connected to database "postgres" as user "alice".
postgres=> DROP DATABASE app1;
DROP DATABASE
postgres=>
ध्यान दें कि आपको पहले psql के "\c" कमांड का उपयोग करके दूसरे डेटाबेस पर स्विच करने की आवश्यकता है।
दूसरा डेटाबेस बनाने के लिए, या app1 . को फिर से बनाने के लिए , सुपरयूज़र के रूप में कनेक्ट करें और पहले की तरह “डेटाबेस बनाएं” करें।
डेटाबेस का बैकअप लें
अपने डेटाबेस में डेटा का बैकअप लेने का सबसे आसान तरीका pg_dump . का उपयोग करना है इस तरह:
alice@ubu:~$ pg_dump -h 127.0.0.1 -U alice -f backup.sql app1
Password:
यह "backup.sql" नामक एक SQL फ़ाइल बनाता है जिसमें डेटाबेस में स्कीमा और डेटा को फिर से बनाने के लिए आवश्यक सभी SQL कमांड शामिल हैं app1 , पाठ प्रारूप में। आप इन आदेशों को किसी भी डेटाबेस में निष्पादित कर सकते हैं, और स्कीमा और डेटा उस डेटाबेस में आबाद हो जाएंगे।
pg_dump के बारे में यहाँ और पढ़ें।
डेटा बहाल करना
आपके द्वारा ऊपर बनाई गई SQL कमांड फ़ाइल को इस प्रकार पुनर्स्थापित किया जा सकता है:
alice@ubu:~$ psql -h 127.0.0.1 -U alice app2
Password for user alice:
psql (13.0 (Ubuntu 13.0-1.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
app2=> \i backup.sql
SET
SET
(..snip..)
ध्यान दें कि हमने स्कीमा और डेटा को दूसरे डेटाबेस में पुनर्स्थापित किया है, app2 . psql का “\i” कमांड आपको किसी फ़ाइल से SQL कमांड निष्पादित करने देता है।
अगले चरण
पोस्टग्रेएसक्यूएल के साथ अधिक कुशल होने में आपकी सहायता के लिए लेख, ट्यूटोरियल, वीडियो और पाठ्यक्रमों का एक पूरा समूह है। हालांकि, यहां आधिकारिक दस्तावेज के साथ कुछ समय बिताएं, जो सभी PostgreSQL सुविधाओं, सिंटैक्स और बंडल उपयोगिताओं का आधिकारिक और व्यापक कवरेज प्रदान करता है।