0Pricing
SQL Academy · Leçon

Blocs DO et code anonyme

Exécutez du PL/pgSQL ponctuel avec des blocs DO, gérez le délimitage dollar et utilisez les blocs DO pour des migrations uniques.

Blocs DO et code anonyme est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Qu’est-ce qu’un bloc DO ?

Un bloc DO permet d’exécuter du PL/pgSQL sans définir de fonction nommée. Il est idéal pour les migrations ponctuelles et les scripts ad hoc.

Bloc DO de base

Syntaxe minimale :

DO $$
BEGIN
  RAISE NOTICE 'Hello from PL/pgSQL';
END;
$$ LANGUAGE plpgsql;

-- The language defaults to plpgsql, so you can omit it:
DO $$ BEGIN RAISE NOTICE 'Hi'; END $$;

Délimitation par dollar

Le délimiteur $$ évite d’échapper les apostrophes. Vous pouvez utiliser une balise pour le code imbriqué :

DO $outer$
BEGIN
  EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;

DDL conditionnel

Ajoutez une colonne uniquement si elle n’existe pas :

DO $$
BEGIN
  IF NOT EXISTS (
    SELECT 1 FROM information_schema.columns
    WHERE table_name='users' AND column_name='last_login'
  ) THEN
    ALTER TABLE users ADD COLUMN last_login TIMESTAMPTZ;
  END IF;
END $$;

Boucles pour une migration en masse

Mettez à jour une très grande table par lots :

DO $$
DECLARE
  rows_updated INT;
BEGIN
  LOOP
    UPDATE users SET tier = compute_tier(...)
    WHERE id IN (
      SELECT id FROM users WHERE tier IS NULL LIMIT 10000
    );
    GET DIAGNOSTICS rows_updated = ROW_COUNT;
    EXIT WHEN rows_updated = 0;
    COMMIT;
  END LOOP;
END $$;

SQL dynamique avec EXECUTE

Construisez des chaînes SQL de manière sûre avec format() et EXECUTE :

DO $$
DECLARE
  tbl TEXT;
BEGIN
  FOR tbl IN SELECT tablename FROM pg_tables WHERE schemaname='public' LOOP
    EXECUTE format('ANALYZE %I;', tbl);
  END LOOP;
END $$;

Contrôle des transactions dans DO

Anciennes versions de PG : un bloc DO s’exécute dans une seule transaction implicite. PG 11+ autorise COMMIT/ROLLBACK dans les procédures (CALL), mais pas dans DO. Pour les migrations par lots avec des COMMIT, utilisez une procédure.

Procédures et DO

  • DO — anonyme, exécuté une fois, dans la transaction actuelle
  • PROCEDURE — nommée, prend en charge COMMIT/ROLLBACK, appelée via CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
  -- can COMMIT here
END $$;

CALL migrate_users();

Gestion des erreurs

Les blocs EXCEPTION fonctionnent comme dans les fonctions nommées :

DO $$
BEGIN
  ...
EXCEPTION
  WHEN OTHERS THEN
    RAISE NOTICE 'failed: %', SQLERRM;
END $$;

N’utilisez pas DO pour les tâches répétées

Si vous devez exécuter la même logique plus d’une fois, définissez une fonction ou une procédure. DO est réservé aux exécutions ponctuelles.

Utiliser DO dans les migrations

La plupart des outils de migration (Flyway, Sqitch) exécutent du SQL brut. Les blocs DO permettent d’intégrer un flux de contrôle sans fonctions séparées.

Récapitulatif

Les blocs DO sont du PL/pgSQL ad hoc.

  • Une seule exécution anonyme
  • Idéal pour le DDL conditionnel et les migrations
  • Surveillez la délimitation par dollar
  • Pour le contrôle des transactions, utilisez PROCEDURE

Vérification rapide

Vous souhaitez exécuter du PL/pgSQL une seule fois pendant une migration sans créer de fonction nommée. Quelle construction devez-vous utiliser ?

Questions Fréquemment Posées

La leçon « Blocs DO et code anonyme » est-elle gratuite ?

Oui — le texte complet de « Blocs DO et code anonyme » 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 « Blocs DO et code anonyme » ?

Exécutez du PL/pgSQL ponctuel avec des blocs DO, gérez le délimitage dollar et utilisez les blocs DO pour des migrations uniques. 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 3 sur 4.

Combien de temps prend la leçon « Blocs DO et code anonyme » ?

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. Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW
  2. Bases des fonctions PL/pgSQL
  3. Blocs DO et code anonyme
  4. Auditer des tables avec des déclencheurs
← Retour à SQL Academy