Skip to content
VDS · ডেটাবেস

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 failedpg_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 clientsmax_connections শেষ হয়ে গেছে — অ্যাপ্লিকেশনের দিকে একটি পুল সেট আপ করুন

লগ: /var/log/postgresql/ অথবা journalctl -u postgresql।

পরবর্তী ধাপ

অ্যাপ্লিকেশনকে সুপারইউজার রোল দেবেন না। একটি সাধারণ ডেটাবেস ওনার রোল তার প্রয়োজনীয় সবকিছু করতে পারে, কিন্তু মাইগ্রেশন ভুল হলে এটি পাশের ডেটাবেস ড্রপ করতে পারে না।