PostgreSQL হলো একটি শক্তিশালী, ওপেন সোর্স রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম (RDBMS)। এটি ডেটা সংরক্ষণ, পরিচালনা এবং নিরাপদভাবে অ্যাক্সেস করার জন্য ব্যবহৃত হয়। PostgreSQL ANSI SQL এর স্ট্যান্ডার্ড অনুসরণ করে এবং এটি ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্যসমূহ সম্পূর্ণরূপে সমর্থন করে, যার ফলে এটি একটি নির্ভরযোগ্য এবং স্কেলেবল ডেটাবেস সমাধান হয়ে ওঠে।
- ট্রাঞ্জেকশন সাপোর্ট (Transaction Support)
- মাল্টি-ভার্সন কনকারেন্সি কন্ট্রোল (MVCC)
- জটিল কুয়েরি এক্সিকিউশন (Complex Query Execution)
- কাস্টম ডেটা টাইপ (Custom Data Types)
- স্টোরড প্রোসিডিউর (Stored Procedures)
- জিওগ্রাফিক ইনফরমেশন সিস্টেম সাপোর্ট (PostGIS)
PostgreSQL ডেভেলপার, অ্যাপ ডেভেলপার এবং গবেষকদের মধ্যে খুবই জনপ্রিয় কারণ:
- এটি বিনামূল্যে ব্যবহার করা যায় (Free & Open Source)
- এটি উচ্চ মানের পারফরম্যান্স ও নিরাপত্তা প্রদান করে
- বড় ও জটিল ডেটাবেস অ্যাপ্লিকেশনগুলোর জন্য একটি বিশ্বস্ত সমাধান
সংক্ষেপে, PostgreSQL হলো একটি পূর্ণাঙ্গ, স্কেলেবল, এবং উন্নত ফিচা 8000 রসমৃদ্ধ ডেটাবেস সিস্টেম — যা প্রোডাকশন লেভেলের যে কোনো অ্যাপ্লিকেশনের জন্য উপযুক্ত।
PostgreSQL-এ একটি ডেটাবেস স্কিমা হল একটি যৌক্তিক কাঠামো বা নেমস্পেস (namespace), যা ডেটাবেসের বিভিন্ন অবজেক্ট যেমন টেবিল, ভিউ, ইনডেক্স, ফাংশন ইত্যাদি সংগঠিত বা গ্রুপ করে রাখতে সাহায্য করে।
একই ডেটাবেসে একাধিক ব্যবহারকারী বা অ্যাপ্লিকেশন একই নামের টেবিল বা ফাংশন তৈরি করতে পারে। তবে তারা আলাদা স্কিমায় থাকলে কোনো সমস্যা হয় না।
বড় ডেটাবেসে অনেক টেবিল, ভিউ, ফাংশন ইত্যাদি থাকে। স্কিমা ব্যবহার করে এগুলোকে বিভাগভিত্তিক ভাগ করে রাখা যায় (যেমন: sales
, hr
, inventory
স্কিমা)।
স্কিমা নির্দিষ্ট ব্যবহারকারী বা রোলের জন্য অনুমতি (permission) নির্ধারণ করা যায়, ফলে নিরাপত্তা ও নিয়ন্ত্রণ বাড়ে।
অ্যাপ্লিকেশনের আলাদা আলাদা অংশ (মডিউল) ভিন্ন স্কিমায় রাখা যায়, যাতে কোড রিইউজ করা ও মেইনটেইন করা সহজ হয়।
CREATE SCHEMA hr;
CREATE TABLE hr.employees (
id SERIAL PRIMARY KEY,
name TEXT,
position TEXT
);
# PostgreSQL-এ Primary Key এবং Foreign Key কী?
PostgreSQL-এ ডেটাবেস ডিজাইনের ক্ষেত্রে **Primary Key** এবং **Foreign Key** হল দুটি অত্যন্ত গুরুত্বপূর্ণ কনসেপ্ট, যা ডেটার **স্বতন্ত্রতা (uniqueness)** ও **সম্পর্ক (relationship)** বজায় রাখতে সাহায্য করে।
---
## Primary Key (প্রাইমারি কি)
**Primary Key** একটি টেবিলের জন্য এমন একটি কলাম (বা কলামের সমষ্টি), যা প্রতিটি রেকর্ডকে অন্য রেকর্ড থেকে আলাদা করে চিহ্নিত করে। এটি **ইউনিক (unique)** এবং কখনোই **NULL** হতে পারে না।
### বৈশিষ্ট্য:
- প্রতিটি টেবিলে মাত্র **একটি Primary Key** থাকতে পারে।
- এটি অটোমেটিকভাবে **ইনডেক্স (index)** তৈরি করে।
- প্রতিটি রেকর্ডের **স্বতন্ত্রতা (uniqueness)** বজায় রাখে।
### উদাহরণ:
```sql
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
name TEXT,
age INT
);
PostgreSQL-এ VARCHAR এবং CHAR উভয়ই টেক্সট ডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয়, তবে এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
- নির্দিষ্ট দৈর্ঘ্যের একটি স্ট্রিং।
- ইনপুট স্ট্রিং যদি ছোট হয়, তাহলে বাকি অংশ স্পেস (space) দিয়ে পূরণ করা হয়।
- সর্বোচ্চ
n
দৈর্ঘ্যের স্ট্রিং রাখতে পারে। - ইনপুট যতটুকু দরকার, শুধু ততটুকুই সংরক্ষণ করে; অতিরিক্ত স্পেস যোগ করে না।
CHAR(n)
সবসময় নির্দিষ্ট দৈর্ঘ্যের ডেটা সংরক্ষণ করে, তাই ফিক্সড ডেটার ক্ষেত্রে পারফরম্যান্সে কিছুটা সুবিধা দিতে পারে।VARCHAR(n)
অনেক বেশি ফ্লেক্সিবল, এবং সাধারণত বেশি ব্যবহৃত হয় কারণ এটি অপ্রয়োজনীয় স্পেস সংরক্ষণ করে না।
বৈশিষ্ট্য | CHAR(n) |
VARCHAR(n) |
---|---|---|
দৈর্ঘ্য | নির্দিষ্ট (Fixed) | পরিবর্তনশীল (Variable) |
স্টোরেজ | অতিরিক্ত স্পেস যোগ হয় | শুধুমাত্র দরকারি চরিত্র সংরক্ষণ হয় |
ট্রিম করা লাগে? | হ্যাঁ (অনেক সময় স্পেস থাকে) | না |
সাধারণ ব্যবহার | ফিক্সড দৈর্ঘ্যের কোড বা ID | নাম, ঠিকানা, ইমেইল ইত্যাদি |
-- CHAR Example
CREATE TABLE employees (
emp_code CHAR(5)
);
-- VARCHAR Example
CREATE TABLE customers (
email VARCHAR(50)
);
# PostgreSQL-এ `SELECT` স্টেটমেন্টে `WHERE` ক্লজের উদ্দেশ্য কী?
## `WHERE` ক্লজ কী?
`WHERE` ক্লজ হলো একটি **শর্ত (condition)** যা `SELECT`, `UPDATE`, বা `DELETE` স্টেটমেন্টে ব্যবহার করে ডেটাবেজ থেকে নির্দিষ্ট কিছু রেকর্ড **ফিল্টার** করে বের করা যায়।
> এটি শুধুমাত সেই রেকর্ডগুলো নির্বাচন করে জেগুলো শর্ত পূরণ করে।
---
## মুল উদ্দেশ্য
* ডেটাবেজ থেকে **নির্দিষ্ট শর্ত** উনুযায়ী তথ্য বের করা
* **অপ্রযোজনীয় বা অনিচ্ছিত ডেটা** বাদ দেওয়া
* **ডেটা বিশ্লেষণের জন্য নির্দিষ্ট অংশ** নির্বাচন করা
---
## গঠন (Syntax)
```sql
SELECT column1, column2
FROM table_name
WHERE condition;
ধরি আমাদের কাছে একটি students
নামের টেবিল আছে:
SELECT * FROM students
WHERE age > 18;
এটি সেইসব ছাত্রদের তথ্য দেখাবে যাদের বয়স 18 বছরের বেশি।
আরেকটি উদাহরণ:
SELECT name FROM students
WHERE grade = 'A';
এটি কেবলমাত সেই ছাত্রদের নাম দেখাবে যাদের গ্রেড A।
অপারেটর | উদ্দেশ্য |
---|---|
=
5027
code> |
সমান |
!= বা <> |
সমান নয় |
> |
বড় |
< |
ছোট |
>= |
বড় বা সমান |
<= |
ছোট বা সমান |
BETWEEN |
দুটি মানের মধ্যে |
LIKE |
প্যাটার্ন মিল (pattern match) |
IN |
নির্দিষ্ট মানের তালিকার মধ্যে |
IS NULL |
NULL চেক |
WHERE
ক্লজ হল ডেটা ফিল্টার করার শক্তিশালী মাধ্যম যা আপনাকে ডেটাবেজ থেকে ঠিক জেটুকু দরকার — শুধুমাত সেটুকু নির্বাচন করতে সহায়তা করে।
ভালো প্র্যাকটিস: সবসময় প্রযোজন অনুযায়ী
WHERE
ক্লজ ব্যবহার করে ডেটা সিলেক্ট করুন, জাতে পারফরম্যান্স ও নির্ভুলতা বজায় থাকে।