0Pricing
SQL Academy · Lektion

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

  1. Aufbau von Triggern: BEFORE/AFTER, FOR EACH ROW
  2. Grundlagen von PL/pgSQL-Funktionen
  3. DO-Blöcke und anonymer Code
  4. Tabellen mit Triggern auditieren
← Zurück zu SQL Academy