DO-blokker og anonym kode
Kjør PL/pgSQL ad hoc med DO-blokker, håndter dollartegnsanførsel, og bruk DO-blokker til engangsmigreringer.
DO-blokker og anonym kode er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva er en DO-blokk?
En DO-blokk lar deg kjøre PL/pgSQL uten å definere en navngitt funksjon. Den er perfekt for engangsmigreringer og ad hoc-skript.
Grunnleggende DO-blokk
Minimal syntaks:
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
Skilletegnet $$ gjør at du slipper å escape enkle anførselstegn. Du kan bruke en tagg for nøstet kode:
DO $outer$
BEGIN
EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;Betinget DDL
Legg til en kolonne bare hvis den ikke finnes:
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 $$;Løkker for bulkmigrering
Oppdater en enorm tabell i puljer:
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-strenger på en trygg måte med format() og 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 $$;Transaksjonskontroll i DO
Eldre PG: En DO-blokk kjører i én enkelt implisitt transaksjon. PG 11+ tillater COMMIT/ROLLBACK i prosedyrer (CALL), men ikke i DO. For puljevise migreringer med commits bruker du en prosedyre.
Prosedyrer kontra DO
- DO – anonym, kjøres én gang, i gjeldende transaksjon
- PROCEDURE – navngitt, støtter COMMIT/ROLLBACK, kalles via CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
-- can COMMIT here
END $$;
CALL migrate_users();Feilhåndtering
EXCEPTION-blokker fungerer på samme måte som i navngitte funksjoner:
DO $$
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'failed: %', SQLERRM;
END $$;Ikke bruk DO til gjentatte oppgaver
Hvis du skal kjøre den samme logikken mer enn én gang, definerer du en funksjon eller prosedyre. DO er beregnet på engangskjøringer.
Bruk DO i migreringer
De fleste migreringsverktøy (Flyway, Sqitch) kjører vanlig SQL. DO-blokker lar deg bygge inn kontrollflyt uten separate funksjoner.
Oppsummering
DO-blokker er ad hoc-PL/pgSQL.
- Én anonym kjøring
- Flott for betinget DDL og migreringer
- Vær oppmerksom på dollar-quoting
- Bruk PROCEDURE for transaksjonskontroll
Kort kontroll
Du vil kjøre PL/pgSQL én gang under en migrering uten å opprette en navngitt funksjon. Hvilken konstruksjon bruker du?
Lær deg SQL med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 46
- Leksjoner
- 183
Ofte stilte spørsmål
Er leksjonen «DO-blokker og anonym kode» gratis?
Ja – hele teksten i «DO-blokker og anonym kode» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «DO-blokker og anonym kode»?
Kjør PL/pgSQL ad hoc med DO-blokker, håndter dollartegnsanførsel, og bruk DO-blokker til engangsmigreringer. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med SQL Academy?
Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «DO-blokker og anonym kode»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?
Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Triggerens anatomi: BEFORE/AFTER, FOR EACH ROW
- Grunnleggende om PL/pgSQL-funksjoner
- DO-blokker og anonym kode
- Revisjon av tabeller med triggere