နားလည်ထားရမယ့် အချက်
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 သုံးပါ။
အတူတူ စမ်းရေးကြည့်မယ်
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();Tutorial row update တိုင်း `updated_at` အလိုအလျောက်ပြောင်းမည်။၅ မိနစ် စမ်းကြည့်
Trigger ကိုစမ်းပြီး no-op update တစ်ခုက timestamp ပြောင်းသလားကြည့်ကာ လိုချင်သော semantics ကိုရေးပါ။
သတိလေးတစ်ချက်
Trigger execution ကိုမသိသော developer က unexpected writes ကို bug လို့ရှာရခက်နိုင်ပါတယ်။ Schema docs နဲ့ tests ထည့်ပါ။
PostgreSQL — PL/pgSQL — PostgreSQL Global Development Group