DO-Blöcke und anonymer Code
Führen Sie Ad-hoc-PL/pgSQL mit DO-Blöcken aus, verwalten Sie Dollar-Quoting und verwenden Sie DO-Blöcke für einmalige Migrationen.
DO-Blöcke und anonymer Code ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein DO-Block?
Mit einem DO-Block können Sie PL/pgSQL ausführen, ohne eine benannte Funktion zu definieren. Ideal für einmalige Migrationen und Ad-hoc-Skripte.
Einfacher DO-Block
Minimale Syntax:
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 $$;Dollar-Quoting
Das Trennzeichen $$ verhindert, dass einfache Anführungszeichen maskiert werden müssen. Für verschachtelten Code können Sie ein Tag verwenden:
DO $outer$
BEGIN
EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;Bedingtes DDL
Fügen Sie eine Spalte nur hinzu, wenn sie noch nicht vorhanden ist:
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 $$;Schleifen für umfangreiche Migrationen
Aktualisieren Sie eine sehr große Tabelle stapelweise:
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 $$;Dynamisches SQL mit EXECUTE
Erstellen Sie SQL-Zeichenfolgen sicher mit format() und 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 $$;Transaktionssteuerung innerhalb von DO
Ältere PG-Versionen: Ein DO-Block wird innerhalb einer einzigen impliziten Transaktion ausgeführt. PG 11+ erlaubt COMMIT/ROLLBACK innerhalb von Prozeduren (CALL), aber nicht in DO. Für stapelweise Migrationen mit Commits verwenden Sie eine Prozedur.
Prozeduren im Vergleich zu DO
- DO – anonym, wird einmal in der aktuellen Transaktion ausgeführt
- PROCEDURE – benannt, unterstützt COMMIT/ROLLBACK und wird über CALL aufgerufen
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
-- can COMMIT here
END $$;
CALL migrate_users();Fehlerbehandlung
EXCEPTION-Blöcke funktionieren genauso wie in benannten Funktionen:
DO $$
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'failed: %', SQLERRM;
END $$;Verwenden Sie DO nicht für wiederholte Aufgaben
Wenn Sie dieselbe Logik mehr als einmal ausführen werden, definieren Sie eine Funktion oder Prozedur. DO ist für einmalige Aufgaben vorgesehen.
DO in Migrationen verwenden
Die meisten Migrationstools (Flyway, Sqitch) führen reines SQL aus. Mit DO-Blöcken können Sie Kontrollfluss einbetten, ohne separate Funktionen zu erstellen.
Rückblick
DO-Blöcke sind Ad-hoc-PL/pgSQL.
- Einmalige anonyme Ausführung
- Ideal für bedingtes DDL und Migrationen
- Auf Dollar-Quoting achten
- Für Transaktionssteuerung PROCEDURE verwenden
Kurzer Test
Sie möchten PL/pgSQL während einer Migration einmalig ausführen, ohne eine benannte Funktion zu erstellen. Welche Konstruktion verwenden Sie?
Häufig gestellte Fragen
Ist die Lektion „DO-Blöcke und anonymer Code“ kostenlos?
Ja — der vollständige Text von „DO-Blöcke und anonymer Code“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „DO-Blöcke und anonymer Code“?
Führen Sie Ad-hoc-PL/pgSQL mit DO-Blöcken aus, verwalten Sie Dollar-Quoting und verwenden Sie DO-Blöcke für einmalige Migrationen. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „DO-Blöcke und anonymer Code“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW
- Grundlagen von PL/pgSQL-Funktionen
- DO-Blöcke und anonymer Code
- Tabellen mit Triggern auditieren