0Pricing
SQL Academy · Leçon

Vues modifiables et déclencheurs INSTEAD OF

Rendez les vues directement modifiables ou utilisez des déclencheurs INSTEAD OF lorsque la vue agrège ou joint des données.

Vues modifiables et déclencheurs INSTEAD OF est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Vues automatiquement modifiables

PostgreSQL rend automatiquement modifiables les vues simples. Les opérations INSERT/UPDATE/DELETE sur la vue sont réécrites comme la même opération sur la table de base :

CREATE VIEW active_users AS
  SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;

UPDATE active_users SET full_name = 'Alice' WHERE id = 1;
-- Translates to UPDATE on the users table.

Conditions pour la mise à jour automatique

La vue doit :

  • Référencer exactement ONE table de base
  • Ne comporter aucune agrégation, aucun GROUP BY, HAVING ou DISTINCT
  • Ne comporter aucun LIMIT ni OFFSET
  • Ne comporter aucune opération ensembliste (UNION, etc.)
  • Mapper directement les colonnes (aucune expression dans la liste SELECT — ou seulement certaines)

WITH CHECK OPTION

Interdisez les écritures qui créeraient des lignes invisibles dans la vue :

CREATE VIEW active_users AS
  SELECT * FROM users WHERE deleted_at IS NULL
  WITH CHECK OPTION;

INSERT INTO active_users (email, deleted_at) VALUES (..., NOW());
-- ERROR — would create a row outside the view's WHERE.

Les vues complexes nécessitent INSTEAD OF

Les vues comportant des jointures, des agrégations ou des expressions ne sont pas automatiquement modifiables. Vous devez écrire un déclencheur INSTEAD OF qui définit la signification d’une écriture :

CREATE VIEW user_with_address AS
  SELECT u.id, u.email, a.city, a.country
  FROM users u JOIN addresses a ON a.user_id = u.id;

CREATE TRIGGER user_addr_update
INSTEAD OF UPDATE ON user_with_address
FOR EACH ROW EXECUTE FUNCTION update_user_addr();

Fonction de déclencheur INSTEAD OF

La fonction détermine dans quelles tables de base écrire :

CREATE FUNCTION update_user_addr() RETURNS TRIGGER AS $$
BEGIN
  UPDATE users SET email = NEW.email WHERE id = NEW.id;
  UPDATE addresses SET city = NEW.city, country = NEW.country WHERE user_id = NEW.id;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Quand INSTEAD OF est préférable à la logique de l’application

Si de nombreux consommateurs mettent la vue à jour, centraliser la logique de mise à jour dans un déclencheur garantit la cohérence. Si une seule application effectue les mises à jour, gardez cette logique dans le code de l’application.

SECURITY BARRIER

Empêchez le planificateur de transmettre le predicate à des consommateurs non fiables de la vue (fuite d’informations par le coût) :

CREATE VIEW my_things AS
SELECT * FROM things WHERE owner_id = current_user_id()
WITH (security_barrier);

La sécurité au niveau des lignes comme solution de remplacement

Les versions modernes de PostgreSQL prennent également en charge la sécurité au niveau des lignes (RLS) sur les tables de base — souvent plus simple que de créer des vues de sécurité.

ALTER TABLE things ENABLE ROW LEVEL SECURITY;
CREATE POLICY owner_only ON things USING (owner_id = current_user_id());

Vues récursives

PostgreSQL prend en charge les vues récursives (vous pouvez effectuer un SELECT sur une hiérarchie) :

CREATE RECURSIVE VIEW tree (id, parent_id, depth) AS
  SELECT id, parent_id, 0 FROM nodes WHERE parent_id IS NULL
  UNION ALL
  SELECT n.id, n.parent_id, t.depth + 1
  FROM nodes n JOIN tree t ON n.parent_id = t.id;

Permissions

Accordez les droits sur la vue, pas sur les tables de base :

GRANT SELECT, UPDATE ON active_users TO app_user;

Remarque sur les performances

Un déclencheur INSTEAD OF se déclenche pour chaque ligne. Pour les DML en masse, c’est lent. Il vaut souvent mieux que les appelants écrivent directement dans les tables de base.

Récapitulatif

Les vues peuvent être modifiables.

  • Vues simples : automatiquement modifiables
  • Vues complexes : déclencheurs INSTEAD OF
  • WITH CHECK OPTION impose la visibilité
  • RLS constitue souvent un modèle de sécurité plus simple

Vérification rapide

Vous définissez une vue qui combine deux tables. Pouvez-vous y exécuter UPDATE par défaut ?

Questions Fréquemment Posées

La leçon « Vues modifiables et déclencheurs INSTEAD OF » est-elle gratuite ?

Oui — le texte complet de « Vues modifiables et déclencheurs INSTEAD OF » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Vues modifiables et déclencheurs INSTEAD OF » ?

Rendez les vues directement modifiables ou utilisez des déclencheurs INSTEAD OF lorsque la vue agrège ou joint des données. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Vues modifiables et déclencheurs INSTEAD OF » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Vues simples : réutilisation logique
  2. Vues modifiables et déclencheurs INSTEAD OF
  3. Vues matérialisées et stratégies de REFRESH
  4. Quand précalculer les agrégats
← Retour à SQL Academy