Triggers হল এমন ফাংশন বা প্রোগ্রাম যা ডেটাবেসে নির্দিষ্ট ঘটনা (events) ঘটার আগে বা পরে স্বয়ংক্রিয়ভাবে চালিত হয়। PostgreSQL-এ BEFORE এবং AFTER triggers ব্যবহৃত হয়, যা ডেটাবেসের উপর নির্দিষ্ট ক্রিয়াগুলির (যেমন INSERT, UPDATE, DELETE) আগে বা পরে কিছু কার্য সম্পাদন করতে সহায়ক।
BEFORE এবং AFTER triggers মূলত ডেটাবেসের ক্রিয়াকলাপের ওপর নজর রাখতে বা নির্দিষ্ট কাজগুলি সম্পাদন করতে ব্যবহৃত হয়।
1. BEFORE Trigger
BEFORE Trigger একটি নির্দিষ্ট ডেটাবেস ইভেন্ট (যেমন INSERT, UPDATE, বা DELETE) সম্পাদিত হওয়ার আগে চলে। এটি সাধারণত ডেটাবেসের পরিবর্তনগুলি পর্যালোচনা বা পরিবর্তন করার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, যদি আপনি চান যে কোনো ডেটা ইনসার্ট হওয়ার আগে কোনো শর্ত পরীক্ষা করা হোক, তাহলে আপনি একটি BEFORE trigger ব্যবহার করতে পারেন।
BEFORE Trigger এর সাধারণ সঠিক গঠন:
CREATE TRIGGER trigger_name
BEFORE event_type
ON table_name
FOR EACH ROW
EXECUTE FUNCTION function_name();
- event_type:
INSERT,UPDATE,DELETE - table_name: যে টেবিলের জন্য trigger তৈরি করতে চান
- function_name: যে ফাংশনটি trigger চালানোর জন্য কল করবে
উদাহরণ 1: BEFORE INSERT Trigger
ধরা যাক, আপনি চান যে employees টেবিলের salary কলামের মান যদি ১০০০০-এর কম হয়, তবে সেটি 10000 এ পরিবর্তিত হবে। এজন্য আপনি একটি BEFORE INSERT trigger ব্যবহার করতে পারেন।
CREATE OR REPLACE FUNCTION check_salary()
RETURNS TRIGGER AS LANGUAGE plpgsql;
CREATE TRIGGER before_insert_salary
BEFORE INSERT ON employees
FOR EACH ROW
EXECUTE FUNCTION check_salary();
এই ট্রিগারের মাধ্যমে, যদি কোনো কর্মচারীর বেতন ১০০০০-এর কম হয়, তবে এটি ইনসার্ট হওয়ার আগে সেটিকে ১০০০০ এ পরিবর্তিত করবে।
2. AFTER Trigger
AFTER Trigger একটি নির্দিষ্ট ডেটাবেস ইভেন্ট (যেমন INSERT, UPDATE, বা DELETE) সম্পাদিত হওয়ার পরে চলে। এটি সাধারণত ডেটাবেসে কোনো পরিবর্তন করার পরে অতিরিক্ত কার্যাবলী (যেমন লগিং, অডিটিং) সম্পাদন করতে ব্যবহৃত হয়।
AFTER Trigger এর সাধারণ সঠিক গঠন:
CREATE TRIGGER trigger_name
AFTER event_type
ON table_name
FOR EACH ROW
EXECUTE FUNCTION function_name();
- event_type:
INSERT,UPDATE,DELETE - table_name: যে টেবিলের জন্য trigger তৈরি করতে চান
- function_name: যে ফাংশনটি trigger চালানোর জন্য কল করবে
উদাহরণ 2: AFTER INSERT Trigger
ধরা যাক, আপনি চান যে কোনো নতুন কর্মচারী যোগ হওয়ার পরে একটি লগ তৈরি করা হোক। এজন্য আপনি একটি AFTER INSERT trigger ব্যবহার করতে পারেন।
CREATE OR REPLACE FUNCTION log_new_employee()
RETURNS TRIGGER AS LANGUAGE plpgsql;
CREATE TRIGGER after_insert_employee
AFTER INSERT ON employees
FOR EACH ROW
EXECUTE FUNCTION log_new_employee();
এই ট্রিগারের মাধ্যমে, যখনই কোনো নতুন কর্মচারী employees টেবিলে ইনসার্ট হবে, তখন একটি লগ employee_log টেবিলে সংরক্ষিত হবে।
3. BEFORE এবং AFTER Triggers এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | BEFORE Trigger | AFTER Trigger |
|---|---|---|
| ইভেন্ট | ইভেন্টের আগে চালিত হয় | ইভেন্ট সম্পন্ন হওয়ার পর চালিত হয় |
| ব্যবহার | ডেটা পরিবর্তন বা যাচাই করতে ব্যবহৃত হয় | ডেটা লগিং, অডিটিং বা অন্যান্য কাজের জন্য ব্যবহৃত হয় |
| কিছু পরিবর্তন | আপনি NEW রেকর্ড পরিবর্তন করতে পারেন (যেমন ইনসার্ট বা আপডেট) | আপনি শুধুমাত্র আউটপুট দেখতে পারেন, তবে কোনো পরিবর্তন করতে পারবেন না |
| সাধারণ উদাহরণ | ইনসার্ট বা আপডেট করার আগে ডেটা যাচাই করা | ইভেন্ট শেষে কোনো কার্যক্রম (যেমন লগ তৈরি করা) |
4. BEFORE এবং AFTER Triggers একসাথে ব্যবহার
মাঝে মাঝে আপনাকে একাধিক trigger ব্যবহার করতে হতে পারে। আপনি BEFORE এবং AFTER ট্রিগার একসাথে ব্যবহার করতে পারেন যদি আপনি একই ইভেন্টের আগে এবং পরে আলাদা কার্যাবলী সম্পাদন করতে চান।
উদাহরণ 3: BEFORE এবং AFTER Triggers একসাথে
ধরা যাক, আপনি employees টেবিলে একটি আপডেট করার পর, একদিকে আপডেট করা ডেটা যাচাই করতে চান এবং অন্যদিকে লগ তৈরি করতে চান। তাহলে আপনি একটি BEFORE এবং AFTER trigger একসাথে ব্যবহার করতে পারেন:
CREATE OR REPLACE FUNCTION validate_salary()
RETURNS TRIGGER AS LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION log_salary_update()
RETURNS TRIGGER AS LANGUAGE plpgsql;
-- BEFORE Trigger (Salary validation)
CREATE TRIGGER before_salary_update
BEFORE UPDATE ON employees
FOR EACH ROW
EXECUTE FUNCTION validate_salary();
-- AFTER Trigger (Logging the update)
CREATE TRIGGER after_salary_update
AFTER UPDATE ON employees
FOR EACH ROW
EXECUTE FUNCTION log_salary_update();
এই উদাহরণে:
- BEFORE UPDATE trigger
salaryযাচাই করবে, যদি ১০০০০ এর কম থাকে তবে এটি একটি ত্রুটি তৈরি করবে। - AFTER UPDATE trigger কর্মচারীর বেতন আপডেট হওয়ার পর একটি লগ তৈরি করবে।
সারাংশ
- BEFORE Trigger: ইভেন্টের আগে কার্যক্রম সম্পাদন করে, ডেটা পরিবর্তন বা যাচাই করার জন্য ব্যবহৃত হয়।
- AFTER Trigger: ইভেন্ট সম্পন্ন হওয়ার পর কার্যক্রম সম্পাদন করে, সাধারণত লগিং বা অডিটিং এর জন্য ব্যবহৃত হয়।
- BEFORE এবং AFTER ট্রিগার ব্যবহারের মাধ্যমে আপনি ডেটাবেসে কার্যক্রমের ওপর আরো নিয়ন্ত্রণ এবং নজর রাখতে পারেন।
Read more