Thuta Learning
ရှာဖွေရန်
AdvancedData & Databasesbeginner

Functions နှင့် Triggers

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Functions နှင့် Triggers concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ SQL/command ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် အသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

SQL/PLpgSQL function က data နီးရာတွင် reusable logic ထားနိုင်ပြီး trigger က INSERT/UPDATE/DELETE event အပေါ်အလိုအလျောက် run ပါတယ်။ Audit field၊ invariant နှင့် derived value အချို့အတွက်ကောင်းသော်လည်း hidden side effects များလွန်းရင် debugging ခက်ပါတယ်။ Business workflow အားလုံးကို trigger ထဲမဝှက်သင့်ပါ။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

`updated_at` ကို update တိုင်းညှိပေးသော trigger function ဖန်တီးမယ်။ Function ရဲ့ `search_path`၊ privilege နှင့် `SECURITY DEFINER` risk ကိုစဉ်းစားပြီး schema-qualified names သုံးပါ။

အတူတူ စမ်းရေးကြည့်မယ်

sql
CREATE FUNCTION app.set_updated_at()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
  NEW.updated_at := clock_timestamp();
  RETURN NEW;
END;
$$;

ALTER TABLE app.tutorials
  ADD COLUMN updated_at timestamptz NOT NULL DEFAULT now();

CREATE TRIGGER tutorials_set_updated_at
BEFORE UPDATE ON app.tutorials
FOR EACH ROW EXECUTE FUNCTION app.set_updated_at();
You should see
Tutorial row update တိုင်း `updated_at` အလိုအလျောက်ပြောင်းမည်။

၅ မိနစ် စမ်းကြည့်

Trigger ကိုစမ်းပြီး no-op update တစ်ခုက timestamp ပြောင်းသလားကြည့်ကာ လိုချင်သော semantics ကိုရေးပါ။

သတိလေးတစ်ချက်

Trigger execution ကိုမသိသော developer က unexpected writes ကို bug လို့ရှာရခက်နိုင်ပါတယ်။ Schema docs နဲ့ tests ထည့်ပါ။

PostgreSQL — PL/pgSQLPostgreSQL Global Development Group

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Trigger execution ကိုမသိသော developer က unexpected writes ကို bug လို့ရှာရခက်နိုင်ပါတယ်။ Schema docs နဲ့ tests ထည့်ပါ။
  • နမူနာ code ကို production data ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test database နှင့် recoverable backup ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Trigger ကိုစမ်းပြီး no-op update တစ်ခုက timestamp ပြောင်းသလားကြည့်ကာ လိုချင်သော semantics ကိုရေးပါ။

You'll know it worked when: Tutorial row update တိုင်း `updated_at` အလိုအလျောက်ပြောင်းမည်။

Functions နှင့် Triggers | Thuta Learning