⚡
【Supabase】データ変更時に「更新日時」を自動更新する処理を作る
特定テーブルのデータを更新したら、そレコードの更新日時カラムupdated_at
を自動更新する処理が必要な場面がよくあります。
SupabaseのFunction機能を使ってこの処理を作成したメモです。
データ変更で「更新日時」を自動更新する処理
1) 「更新日時を更新する関数」を作成する
-- updated_atカラムを更新する関数作成
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified_at = timezone('Asia/Tokyo', now());
RETURN NEW;
END;
$$ language 'plpgsql';
2) トリガーを設定する(データの変更があった時に関数実行)
-- postテーブル用のトリガーの設定
CREATE TRIGGER update_post_modtime
BEFORE UPDATE ON post
FOR EACH ROW
EXECUTE FUNCTION update_modified_column();
特定カラムの変更を除外したい場合
users28day
というカラムの更新時は更新日時の自動更新をしない、という例外処理です。
-- 特定カラムを変更した時は除外する
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
-- users28dayが更新されていない場合にのみupdated_atを更新
IF OLD.users28day IS DISTINCT FROM NEW.users28day THEN
RETURN NEW;
ELSE
NEW.modified_at = timezone('Asia/Tokyo', now());
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Discussion