SQL Academy · Lektion

DO-block och anonym kod

Kör tillfällig PL/pgSQL-kod med DO-block, hantera dollarquoting och använd DO-block för engångsmigreringar.

Lektion 3 av 413 steg

DO-block och anonym kod är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.

Vad är ett DO-block?

Med ett DO-block kan du köra PL/pgSQL utan att definiera en namngiven funktion. Perfekt för engångsmigreringar och ad hoc-skript.

Grundläggande DO-block

Minimal 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

Avgränsaren $$ gör att du slipper escapa enkla citattecken. Du kan använda en tagg för kapslad kod:

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

Villkorlig DDL

Lägg till en kolumn endast om den inte redan finns:

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 $$;

Loopar för bulkmigrering

Batchuppdatera en mycket stor tabell:

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 $$;

Dynamisk SQL med EXECUTE

Bygg SQL-strängar säkert med format() och 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 $$;

Transaktionsstyrning i DO

I äldre PG körs ett DO-block i en enda implicit transaktion. PG 11+ tillåter COMMIT/ROLLBACK i procedurer (CALL), men inte i DO. Använd en procedur för batchade migreringar med commit.

Procedurer jämfört med DO

  • DO — anonymt, körs en gång i den aktuella transaktionen
  • PROCEDURE — namngiven, stöder COMMIT/ROLLBACK och anropas via CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
  -- can COMMIT here
END $$;

CALL migrate_users();

Felhantering

EXCEPTION-block fungerar på samma sätt som i namngivna funktioner:

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

Använd inte DO för återkommande uppgifter

Om du ska köra samma logik mer än en gång, definiera en funktion eller procedur. DO är avsett för engångskörningar.

Använd DO i migreringar

De flesta migreringsverktyg (Flyway, Sqitch) kör vanlig SQL. Med DO-block kan du bädda in styrflöde utan separata funktioner.

Sammanfattning

DO-block är ad hoc-PL/pgSQL.

  • En enda anonym körning
  • Utmärkt för villkorlig DDL och migreringar
  • Var uppmärksam på dollar-quoting
  • Använd PROCEDURE för transaktionsstyrning

Snabbkontroll

Du vill köra PL/pgSQL en gång under en migrering utan att skapa en namngiven funktion. Vilken konstruktion ska du använda?

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
46
Lektioner
183

Vanliga frågor

Är lektionen ”DO-block och anonym kod” gratis?

Ja – hela texten till ”DO-block och anonym kod” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”DO-block och anonym kod”?

Kör tillfällig PL/pgSQL-kod med DO-block, hantera dollarquoting och använd DO-block för engångsmigreringar. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig SQL Academy?

Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”DO-block och anonym kod”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här SQL Academy-lektionen?

Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Triggerns anatomi: BEFORE/AFTER, FOR EACH ROW
  2. Grunderna i PL/pgSQL-funktioner
  3. DO-block och anonym kod
  4. Granskning av tabeller med triggers
← Tillbaka till SQL Academy