PostgreSQL: ইনস্টলেশন এবং আপনার প্রথম ডেটাবেস
VDS-এ PostgreSQL ইনস্টল করা, রোল ও প্রথম ডেটাবেস, pg_hba.conf-এ অথেন্টিকেশন কীভাবে কাজ করে, এবং কানেকশন এরর সমাধান।
আপডেট: ২৩ আগস্ট, ২০২৬
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 মেথড ব্যবহার করবেন না — এটি পাসওয়ার্ড ছাড়াই যে কাউকে ঢুকতে দেয়।
বাইরে থেকে অ্যাক্সেসের জন্য রিমোট অ্যাক্সেস পড়ুন: অ্যাড্রেস দিয়ে সীমাবদ্ধ না করে বাইরে কোনো পোর্ট খোলা উচিত নয়।
সাধারণ ত্রুটি
| লক্ষণ | কারণ |
|---|---|
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।
পরবর্তী ধাপ
- প্রতি টিয়ারে মেমোরি টিউনিং — VDS-1-এ ডিফল্ট মান লক্ষণীয়ভাবে খুব কম।
- ব্যাকআপ —
pg_dumpএবং রিস্টোর। - অন্য সার্ভার থেকে ডেটাবেস মাইগ্রেট করা।
অ্যাপ্লিকেশনকে সুপারইউজার রোল দেবেন না। একটি সাধারণ ডেটাবেস ওনার রোল তার প্রয়োজনীয় সবকিছু করতে পারে, কিন্তু মাইগ্রেশন ভুল হলে এটি পাশের ডেটাবেস ড্রপ করতে পারে না।