Supabase SQL : Triggers, Fonctions et Procédures Stockées

Supabase repose sur PostgreSQL, le système de base de données relationnelle le plus avancé du monde open source. Grâce aux triggers, fonctions et procédures stockées, vous pouvez automatiser des logiques métier directement dans la base de données.

Pour une vue d’ensemble, lis notre guide complet Supabase. Pour la structure des tables, consulte notre guide créer et structurer sa base de données Supabase. Pour sécuriser ces fonctions, lis notre article sur le Row Level Security Supabase. Pour l’architecture générale, voir architecture Supabase.

Les Fonctions PostgreSQL dans Supabase

CREATE OR REPLACE FUNCTION get_user_age(user_id UUID)
RETURNS INTEGER AS $$
  SELECT EXTRACT(YEAR FROM AGE(birthdate))::INTEGER
  FROM profiles WHERE id = user_id;
$$ LANGUAGE sql STABLE;

-- Appel depuis le client Supabase
const { data } = await supabase.rpc('get_user_age', { user_id: 'uuid-here' })

Les Triggers PostgreSQL

Cas d’usage 1 : Mise à jour automatique de updated_at

CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER posts_updated_at
BEFORE UPDATE ON posts
FOR EACH ROW EXECUTE FUNCTION update_updated_at();

Cas d’usage 2 : Créer un profil automatiquement à l’inscription

CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
BEGIN
  INSERT INTO public.profiles (id, email, created_at)
  VALUES (NEW.id, NEW.email, NOW());
  RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER on_auth_user_created
AFTER INSERT ON auth.users
FOR EACH ROW EXECUTE FUNCTION public.handle_new_user();

Bonnes Pratiques

  • ✅ SECURITY DEFINER pour les fonctions avec droits élevés
  • ✅ Fonctions SQL pour les requêtes simples (meilleure performance)
  • ✅ PL/pgSQL pour la logique complexe
  • ❌ Évitez les triggers en cascade — difficiles à déboguer

👉 Articles du guide Supabase

Cet article fait partie du Guide Complet Supabase 2026. Retrouvez les autres articles :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *