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.
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?
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
- Triggerns anatomi: BEFORE/AFTER, FOR EACH ROW
- Grunderna i PL/pgSQL-funktioner
- DO-block och anonym kod
- Granskning av tabeller med triggers