PostgreSQL: इंस्टॉलेशन और आपका पहला डेटाबेस
VDS पर PostgreSQL इंस्टॉल करना, रोल और पहला डेटाबेस, pg_hba.conf में ऑथेंटिकेशन कैसे काम करता है, और कनेक्शन एरर ठीक करना।
23 अगस्त 2026 को अपडेट किया गया
PostgreSQL, Python, Node.js और Go की एप्लिकेशन के लिए डिफ़ॉल्ट पसंद है। यह MySQL की तुलना में डेटा को ज़्यादा सख़्ती से संभालता है और जटिल क्वेरी को बेहतर तरीके से हैंडल करता है।
इंस्टॉलेशन
apt update && apt install -y postgresql postgresql-contrib # Debian, Ubuntu
systemctl enable --now postgresql
AlmaLinux और CentOS Stream पर आपको क्लस्टर मैन्युअली बनाना होगा:
dnf install -y postgresql-server postgresql-contrib
postgresql-setup --initdb
systemctl enable --now postgresql
वर्ज़न और स्टेटस जाँचें:
sudo -u postgres psql -c "SELECT version();"
रोल और डेटाबेस
PostgreSQL में यूज़र को रोल कहा जाता है। हर प्रोजेक्ट के लिए अलग रोल बनाएँ:
sudo -u postgres psql
CREATE ROLE shop WITH LOGIN PASSWORD 'long-random-password';
CREATE DATABASE shop OWNER shop ENCODING 'UTF8';
REVOKE ALL ON DATABASE shop FROM PUBLIC;
एप्लिकेशन के लिए कनेक्शन स्ट्रिंग:
postgresql://shop:password@127.0.0.1:5432/shop
सिस्टम यूज़र से जाँचें:
psql "postgresql://shop:password@127.0.0.1:5432/shop" -c "\dt"
ऑथेंटिकेशन
दो फ़ाइलें तय करती हैं कि कौन लॉग इन कर सकता है और कहाँ से।
/etc/postgresql/17/main/postgresql.conf:
listen_addresses = 'localhost'
port = 5432
/etc/postgresql/17/main/pg_hba.conf — नियम ऊपर से नीचे पढ़े जाते हैं, और पहला मैच करने वाला नियम लागू होता है:
local all postgres peer
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
peer मेथड का मतलब है “सिस्टम यूज़र रोल से मैच करता है” — इसीलिए sudo -u postgres psql बिना पासवर्ड के काम करता है, जबकि किसी दूसरे यूज़र से वही कमांड नहीं चलता।
एडिट करने के बाद: systemctl reload postgresql। कभी भी trust मेथड का इस्तेमाल न करें — यह किसी को भी बिना पासवर्ड के अंदर आने देता है।
बाहर से एक्सेस के लिए, remote access पढ़ें: आपको पता के हिसाब से रोक-टोक किए बिना पोर्ट बाहर के लिए नहीं खोलना चाहिए।
आम एरर
| लक्षण | कारण |
|---|---|
role "..." does not exist | आप ऐसे सिस्टम यूज़र से कनेक्ट कर रहे हैं जिसका कोई रोल नहीं है |
password authentication failed | pg_hba.conf में नियम किसी दूसरे मेथड की माँग करता है, या कोई पासवर्ड सेट नहीं है |
could not connect to server: No such file or directory | सर्विस चल नहीं रही, या यह किसी दूसरे पोर्ट का इस्तेमाल करती है |
permission denied for schema public | वर्ज़न 15+ में आपको public पर अधिकार साफ़-साफ़ देना होगा: GRANT ALL ON SCHEMA public TO shop; |
FATAL: sorry, too many clients | max_connections ख़त्म हो गए हैं — एप्लिकेशन की तरफ़ एक पूल सेट करें |
लॉग: /var/log/postgresql/ या journalctl -u postgresql।
अगले कदम
- Memory tuning per tier — VDS-1 पर डिफ़ॉल्ट वैल्यू काफ़ी कम हैं।
- Backups —
pg_dumpऔर रिस्टोर। - Migrating a database from another server।
एप्लिकेशन को सुपरयूज़र रोल न दें। एक सामान्य डेटाबेस ओनर रोल वह सब कर सकता है जो उसे चाहिए, लेकिन अगर कोई माइग्रेशन गड़बड़ हो जाए तो यह पड़ोसी डेटाबेस को ड्रॉप नहीं कर सकता।