BEFORE এবং AFTER Triggers এর ব্যবহার

Triggers এবং Events - পোস্টগ্রিএসকিউএল (PostgreSQL) - Database Tutorials

344

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 BEGINIFNEW.salary<10000THENNEW.salary:=10000;--salary10000ি10000িENDIF;RETURNNEW;END;
BEGIN
    IF NEW.salary < 10000 THEN
        NEW.salary := 10000;  -- salary 10000 থেকে কম হলে সেটি 10000 করে দিবে
    END IF;
    RETURN NEW;
END;
 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 BEGININSERTINTOemployeelog(message,logdate)VALUES('Newemployeeadded:'||NEW.name,CURRENTTIMESTAMP);RETURNNEW;END;
BEGIN
    INSERT INTO employee_log (message, log_date)
    VALUES ('New employee added: ' || NEW.name, CURRENT_TIMESTAMP);
    RETURN NEW;
END;
 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 TriggerAFTER 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 BEGINIFNEW.salary<10000THENRAISEEXCEPTION'Salarymustbegreaterthan10000';ENDIF;RETURNNEW;END;
BEGIN
    IF NEW.salary < 10000 THEN
        RAISE EXCEPTION 'Salary must be greater than 10000';
    END IF;
    RETURN NEW;
END;
 LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION log_salary_update() 
RETURNS TRIGGER AS BEGININSERTINTOemployeelog(message,logdate)VALUES('Salaryupdatedforemployee:'||NEW.name,CURRENTTIMESTAMP);RETURNNEW;END;
BEGIN
    INSERT INTO employee_log (message, log_date)
    VALUES ('Salary updated for employee: ' || NEW.name, CURRENT_TIMESTAMP);
    RETURN NEW;
END;
 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 ট্রিগার ব্যবহারের মাধ্যমে আপনি ডেটাবেসে কার্যক্রমের ওপর আরো নিয়ন্ত্রণ এবং নজর রাখতে পারেন।
Content added By
Promotion

Are you sure to start over?

Loading...