【入門編】 トリガーの基礎 – PostgreSQL

こんにちは!データベースの世界へようこそ。

現場でバリバリとSQLを書いていると、「あ、この作業、いちいち手動でやるの面倒だな…」「もしデータを更新した時に、ついでに別の記録も残せたら楽なのに」なんて思うこと、ありませんか?

そんな時、私たちエンジニアが頼りにするのが「トリガー(Trigger)」という仕組みです。名前からして何だか強そうですよね。今日は、このトリガーが一体何をしてくれるものなのか、初心者の方にもスッとイメージできるように解説していきますね。

—

トリガーって、結局何者?

日常の出来事で例えるなら、「自動販売機」をイメージしてみてください。

お金を入れてボタンを押す(これが「データの更新」)。すると、自動的にジュースが出てきて、お釣りが返ってくる(これが「トリガーによる自動処理」)。

データベースにおけるトリガーも全く同じです。「誰かがデータを書き込んだら、ついでにこれもやっておいて!」と、あらかじめ命令をセットしておける「自動化のスイッチ」のことなんです。

—

いつ動かす?「タイミング」のお話

トリガーには、どのタイミングで動くかという「合図」がいくつかあります。

  • BEFORE(やる前):

「データが入ってくる直前にチェックしたい」時。
例えば、入力された数字が変じゃないか確認したり、勝手に書き換えたりする「門番」のような役割です。

  • AFTER(やった後):

「処理が終わったついでに何かしたい」時。
「更新しましたよ」というログを別の場所に残したり、通知を送ったりするのにぴったりです。

  • INSTEAD OF(代わりに):

「直接やるんじゃなくて、代わりにこれやって!」という代理人。
ちょっと複雑なビュー(表の見せかけ)を操作する時に使います。

—

どれくらいの範囲で動く?「実行単位」のお話

次に大切なのが、「何回動くか」という設定です。

  • FOR EACH ROW(行ごと):

例えば、100人分のデータを一度に更新したとします。この設定だと、100回分きっちりトリガーが働きます。「一人ずつ丁寧に対応する」イメージですね。

  • FOR EACH STATEMENT(文ごと):

100人分更新しても、トリガーは「1回だけ」動きます。「作業全体が終わった後に、一言だけ報告する」ような使い方です。

—

試しに書いてみよう:CREATE TRIGGER

構文と聞くと身構えてしまうかもしれませんが、パズルのように組み立てるだけです。

CREATE TRIGGER 自動記録のトリガー
AFTER INSERT ON ユーザーリスト
FOR EACH ROW
EXECUTE FUNCTION ログを残す関数();

これだけで、「ユーザーリストに新しい人が追加されたら(AFTER INSERT)、一人ずつ(FOR EACH ROW)、自動的にログを残す(EXECUTE FUNCTION)」という仕組みが完成です!

—

トリガーを使う時の「ちょっとした注意点」

最後に、ベテランからのアドバイスをひとつだけ。

トリガーは魔法のように便利ですが、「やりすぎ注意」です。あちこちにトリガーを仕込みすぎると、どの処理がどこで動いているのか分からなくなり、「データが更新された原因はどれだっけ?」と迷子になってしまいます。

「ここぞ!」という自動化のポイントに絞って使うのが、スマートなデータベース設計のコツですよ。

—

いかがでしたか?「トリガー」という言葉の響きは難しそうですが、要は「頑張るデータベースのお手伝いさん」なんです。

まずは小さなテーブルで試してみて、「お、本当に勝手に動いた!」という感動をぜひ味わってみてください。それがエンジニアとしての第一歩です。

それでは、また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました