প্রথমে সিস্টেম প্যাকেজ গুলো আপডেট করে নিব।
sudo apt update && sudo apt upgrade -y
এরপর PostgreSQL ইন্সটল করবঃ
sudo apt install postgresql postgresql-contrib -y
এখানে এক সাথে দুইটা প্যাকেজ ইন্সটল করেছি আমরা।
- postgresql হচ্ছে মেইন PostgreSQL
postgresql-contribহচ্ছে এক্সট্রা কিছু দরকারি টুল। যেমনpg_dump,hstoreইত্যাদি।
স্ট্যাটাস চেক
sudo systemctl status postgresql
যদি রানিং না থাকে, তাহলে নিচের কমান্ড রান করে রান করে নিতে পারবঃ
sudo systemctl start postgresql
সিস্টেম বুটে যেন পোস্টগ্রেস রান হয়, তার জন্য নিচের কমান্ড রান করে নিব।
sudo systemctl enable postgresql
SQL কমান্ড রান করা
ডিফল্ট ভাবে পোস্টগ্রেস postgres নামে একটা ইউজার তৈরি করে। MySQL সাধারণত সিস্টেম root ইউজার দিয়ে এক্সেস করা যায়। পোস্টগ্রেসের ক্ষেত্রে postgres ইউজার দিয়ে এক্সেস করতে হয়। তার জন্য নিচের কমান্ড রান করবঃ
sudo -i -u postgres
এবার এই ইউজার ব্যবহার করে পোস্টগ্রেস প্রম্পট এ এক্সেস করবঃ
psql
এবার আমরা যে কোন পোস্টগ্রেস SQL কমান্ড রান করতে পারব। যেমন নতুন একটা ডেটাবেজ তৈরি করার জন্যঃ
CREATE DATABASE myappdb;
এরপর এই myappdb ডেটাবেজে কানেক্ট হবো postgres-# প্রোম্পট থেকেঃ
\c myappdb
রেসপন্স পাবো এমনঃ
You are now connected to database "myappdb" as user "postgres".
এবার আমরা যে কোন SQL কমান্ড রান করতে পারব। যেমন users নামে কোন টেবিল তৈরি করার জন্যঃ
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- Auto-incrementing ID
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
এরপর চাইলে কোন কিছু ডেটা ইনসার্ট করে দেখতে পারিঃ
INSERT INTO users (username, email, password)
VALUES
('alice', '[email protected]', 'password123'),
('bob', '[email protected]', 'secret456'),
('charlie', '[email protected]', 'mypassword');
যা রিটার্ণ করবে INSERT 0 3। এবার ডেটা গুলো দেখতে চাইলেঃ
SELECT * FROM users;
তাহলে নিচের মত করে ডেটা দেখাবেঃ

এই myappdb এর জন্য কোন ইউজারকে এসাইন করে দিতে পারি আমরা। তার জন্য নিচের মত করে কমান্ড লিখতে পারিঃ
CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE myappdb TO myuser;
ফুল প্রিভিলিজ দিতে চাইলে প্রথমে psql -U postgres কমান্ড রান করতে হবে। এরপর নির্দিষ্ট ডেটাবেজে সুইচ করতে হবেঃ
\c myappdb
তারপর নিচের কমান্ড গুলো রান করতে হবেঃ
-- Grant privileges on all existing tables
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;
-- Grant privileges on all sequences (needed for SERIAL columns)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO myuser;
-- Grant privileges automatically on any future tables and sequences
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO myuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO myuser;
এরপর \l কমান্ড ব্যবহার করে প্রিভিলেজ যাচাই করা যাবেঃ
\l
এখান থেকে q প্রেস করে বের হওয়া যাবে।
SQL প্রোম্পট থেকে এক্সিট নেওয়ার জন্যঃ
\q
রিমোট এক্সেস
যদি ব্যাকেন্ড কোড এবং পোস্টগ্রেস একই সার্ভারে থাকে, তাহলে রিমোটলি এক্সেস এনাবল করার দরকার পড়বে না। যদি দরকার পড়ে, তাহলে নিচের মত করে কনফিগার করে নিতে হবে। এর জন্য প্রথমে PostgreSQL কনফিগারেশন ফাইল এডিট করবঃ
sudo nano /etc/postgresql/16/main/postgresql.conf
এরপর listen_addresses লাইনটা আনকমেন্ট করে ‘*’ যোগ করব। নিচের মত করেঃ
listen_addresses = '*'
এরপর ক্লায়েন্ট অথেনটিকেশন ফাইল এডিট করবঃ
sudo nano /etc/postgresql/16/main/pg_hba.conf
এখানে যে কোন আইপি থেকে এক্সেস পাওয়ার জন্য 0.0.0.0/0 আইপি যোগ করতে হবে।
host all all 0.0.0.0/0 scram-sha-256
এটা টেস্টিং এর ক্ষেত্রে ঠিক আছে। এরপর রিমুভ করে দেওয়া উচিৎ। না হয় সিকিউরিটি ইস্যু তৈরি হবে।
পোস্টগ্রেসের ডিফল্ট পোর্ট হচ্ছে 5432। এই পোর্ট ওপেন করতে হবেঃ
sudo ufw allow 5432/tcp
sudo ufw reload
রিমোট এক্সেসের জন্য আমরা যে কোন
ডেটাবেজ ম্যানেজমেন্টের জন্য গ্রাফিক্যাল ইন্টারফেস
পোস্টগ্রেস ম্যানেজমেন্টের জন্য অফিশিয়াল ইন্টারফেস হচ্ছে pgAdmin। VPS, ডকার, ম্যাক বা উইন্ডোজে ইন্সটল করা যায়। ওয়েব ইন্টারফেস ইন্সটল করার জন্য অফিশিয়াল গাইড।
#
# Setup the repository
#
# Install the public key for the repository (if not done previously):
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
# Create the repository configuration file:
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
#
# Install pgAdmin
#
# Install for both desktop and web modes:
sudo apt install pgadmin4
# Install for desktop mode only:
sudo apt install pgadmin4-desktop
# Install for web mode only:
sudo apt install pgadmin4-web
# Configure the webserver, if you installed pgadmin4-web:
sudo /usr/pgadmin4/bin/setup-web.sh
ইন্সটল করার সময় ইউজার ইমেইল এবং পাসওয়ার্ড এন্টার করতে বলবে। এই ইমেইল এবং পাসওয়ার্ড ব্যবহার করে ওয়েব ইন্টারফেসে লগিন করতে পারব।
এর জন্য প্রথমে এপাচি রিস্টার্ট করে নিব।
sudo systemctl restart apache2
এরপর http://your_ip_address/pgadmin4 ঠিকানায় গেলে ওয়েব ইন্টারফেসে লগিন করতে পারব।
ডেস্কটপ অ্যাপ
উইন্ডোজ, ম্যাক বা লিনাক্সের জন্য ডেস্কটপ অ্যাপও রয়েছে। ডাউনলোড পেইজে পাওয়া যাবে।
ডেস্কটপ বা ওয়েব ইন্টারফেস দুইটাই একই রকম।

এখানে প্রথমে একটা নাম চাইবে। যে কোন একটা নাম দিতে পারব। Host name / address এ সার্ভারের আইপি এড্রেস দিতে হবে। কোন ডেটাবেজ কানেক্ট করব, তা লিখতে হবে Maintenance database ফিল্ডে। এরপর ডেটাবেজ ইউজারনেম এবং পাসওয়ার্ড দিয়ে সেভ করলে কানেক্ট করা যাবে। পোর্ট সাধারণত 5432 হয়ে থাকে। ম্যানুয়ালি পরিবর্তন না করলে 5432 ব্যবহার করতে হবে। এরপর ভিজ্যুয়ালি ডেটাবেজ ম্যানেজ করা যাবে।
এই pgAdmin অনেক হেভি একটা টুল। অনেক কিছু রয়েছে। তাই সার্ভারে না ইন্সটল করে ডেস্কটপ ভার্সন ব্যবহার করা যেতে পারে। সার্ভারে যদি ব্যবহার করতেই হয়, তাহলে Adminer ব্যবহার কতে পারেন। একটা সিঙ্গেল PHP ফাইল ব্যবহার করে একাধিক ডেটাবেজ ম্যানেজমেন্ট সিস্টেম যেমন MySQL, MariaDB, PostgreSQL, CockroachDB, SQLite, MS SQL, Oracle ভিজ্যুয়ালি দেখা যায়। ফিচার অনেক লিমিটেড যদিও। দরকারি সব কাজই করা যায়।
Adminer ব্যবহার
এডমিনার ব্যবহার করার জন্য প্রথমে এপাচি এবং পিএইচপি ইন্সটল করতে হবে।
sudo apt update
sudo apt install apache2 php php-pgsql -y
এরপর এডমিনার ডাউনলোড করবঃ
sudo mkdir -p /var/www/html/adminer
sudo wget "https://www.adminer.org/latest.php" -O /var/www/html/adminer/index.php
এই ফাইল যেন এপাচি এক্সেস করতে পারে, তার জন্য পারমিশন পরিবর্তন করতে হবেঃ
sudo chown -R www-data:www-data /var/www/html/adminer
sudo chmod -R 755 /var/www/html/adminer
এরপর আমরা এডমিনার এক্সেস করতে পারব http://your_vps_ip/adminer ঠিকানায়। লগিন করার জন্য এই ইনফরমেশন গুলো লাগবেঃ

সার্ভার এড্রেসে সার্ভারের আইপি এড্রেস দিতে হবে। ইউজারনেম হচ্ছে ডেটাবেজ ইউয়ার নেম। এবং ডেটাবেজের নাম দিতে হবে। এরপর লগিন করে ডেটাবেজ দেখা যাবে।
পোস্টগ্রেস ব্যবহার করে সিম্পল এক্সপ্রেস অ্যাপ তৈরি
এর আগে আমরা দেখেছি কিভাবে এক্সপ্রেস ব্যবহার করে CRUD অ্যাপ তৈরি করা যায়। প্রিজমা ব্যবহার করে কিভাবে ডেটাবেজ মাইগ্রেশন সহ অন্যান্য কাজ করা যায়। যা সম্পর্কে বিস্তারিত জানা যাবে এক্সপ্রেস অ্যাপে ডেটাবেজ মাইগ্রেশন এবং প্রিজমা ORM লেখায়। এবার আমরা ডেটাবেজ হিসেবে PostgreSQL ব্যবহার করব। এবং লোকাল ডেটাবেজের পরিবর্তে সার্ভারে থাকা ডেটাবেজ ব্যবহার করব। যদিও স্ট্যান্ডার্ড প্র্যাকটিস হচ্ছে ডেভেলপমেন্টের সময় লোকাল ডেটাবেজ ব্যবহার করা এবং প্রোডাকশনে সার্ভারে থাকা ডেটাবেজ ব্যবহার করা। প্রিজমা এই কাজটা খুব সহজ করে দেয় .env ফাইল ব্যবহার করে এগুলো সহজে ম্যানেজ করা যায়।
প্রথমে একটা নোড অ্যাপ ইনিশিয়ালাইজ করে নিব
npm init -y
এরপর প্রিজমা, এক্সপ্রেস, হটরিলোডের জন্য নডেমন ইন্সটল করে নিবঃ
npm install express @prisma/client
npm install -D prisma nodemon
এরপর প্রিজমা ইনিশিয়ালাইজ করে নিবঃ
npx prisma init
প্রিজমা ইনিশিয়ালাইজ করলে prisma/schema.prisma এবং .env ফাইল জেনারেট করে দিবে। এই .env ফাইলে ডেটাবেজ URL সেট করতে হবেঃ
DATABASE_URL="postgresql://myuser:mypassword@localhost:5432/myappdb?schema=public"
এখানে localhost এর যায়গায় সার্ভারের আইপি এড্রেস ব্যবহার করতে হবে।
এতটুকু করে আমরা টেস্ট করতে পারব ডেটাবেজ ঠিক মত কানেক্ট হয়েছে কিনা। তার জন্য লিখবঃ
npx prisma db pull
যদিও উপরের কমান্ড কানেকশন যাচাইয়ের পাশাপাশি সার্ভারে থাকা ডেটাবেজের স্কিমাও ডাউনলোড করবে। এর আগে যেহেতু আমরা myappdb এ ইউজার নামে একটা টেবিল তৈরি করেছি, তাই schema.prisma নিচের মত করে আপডেট হবেঃ
generator client {
provider = "prisma-client"
output = "../generated/prisma"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model users {
id Int @id @default(autoincrement())
username String @unique @db.VarChar(50)
email String @unique @db.VarChar(100)
password String @db.VarChar(255)
created_at DateTime? @default(now()) @db.Timestamp(6)
}
কানেক্ট হলে আমাদের ডেটাবেজ সম্পর্কিত তথ্য দেখাবে। এরপর আমরা খুব সহজে প্রিজমা স্টুডিও ব্যবহার করেও ভিজ্যুয়ালি ডেটাবেজ এবং এর ডেটা দেখতে পাবোঃ
schema.prisma ফাইল থেকে generator এ প্রভাইডার পরিবর্তন করব এবং output = “../generated/prisma” কেটে দিব। নিচের মত করে লিখবঃ
generator client {
provider = "prisma-client-js"
}
npx prisma studio
এবার একটা সিম্পল server.js ফাইল তৈরি করিঃ
const express = require("express");
const { PrismaClient } = require("@prisma/client");
const bcrypt = require("bcrypt");
const app = express();
const prisma = new PrismaClient();
app.use(express.json());
// --------------------
// CREATE NEW USER
// --------------------
app.post("/users", async (req, res) => {
try {
const { username, email, password } = req.body;
// Optional: hash password before saving
const hashedPassword = await bcrypt.hash(password, 10);
const user = await prisma.users.create({
data: {
username,
email,
password: hashedPassword,
},
});
res.json({ id: user.id, username: user.username, email: user.email });
} catch (err) {
console.error(err);
if (err.code === "P2002") {
// Unique constraint failed
return res.status(400).json({ error: "Username or email already exists" });
}
res.status(500).json({ error: "Something went wrong" });
}
});
// --------------------
// GET ALL USERS
// --------------------
app.get("/users", async (req, res) => {
try {
const users = await prisma.users.findMany({
select: { id: true, username: true, email: true, created_at: true },
orderBy: { id: "desc" },
});
res.json(users);
} catch (err) {
console.error(err);
res.status(500).json({ error: "Something went wrong" });
}
});
// --------------------
// GET SINGLE USER BY ID
// --------------------
app.get("/users/:id", async (req, res) => {
const { id } = req.params;
try {
const user = await prisma.users.findUnique({
where: { id: Number(id) },
select: { id: true, username: true, email: true, created_at: true },
});
if (!user) return res.status(404).json({ error: "User not found" });
res.json(user);
} catch (err) {
console.error(err);
res.status(500).json({ error: "Something went wrong" });
}
});
// --------------------
// DELETE USER
// --------------------
app.delete("/users/:id", async (req, res) => {
const { id } = req.params;
try {
await prisma.users.delete({
where: { id: Number(id) },
});
res.json({ message: "User deleted successfully" });
} catch (err) {
console.error(err);
res.status(500).json({ error: "Something went wrong" });
}
});
// --------------------
// START SERVER
// --------------------
const PORT = 3000;
app.listen(PORT, () => {
console.log(`🚀 Server running on port ${PORT}`);
});
উপরে পাসওয়ার্ড স্টোর করার জন্য bcrypt ব্যবহার করেছি। তাই এটা ইন্সটল করতে হবে।
npm install bcrypt
এই অ্যাপ এবার রান করিঃ
node server.js
তাহলে http://localhost:3000/users ঠিকানায় সব গুলো ইউজার দেখতে পাবো।
নতুন ইউজার যোগ করার জন্যঃ
curl -X POST http://localhost:3000/users \
-H "Content-Type: application/json" \
-d '{"username":"Your name","email":"[email protected]","password":"123456"}'