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
- Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW
- Bases des fonctions PL/pgSQL
- Blocs DO et code anonyme
- Auditer des tables avec des déclencheurs