SQL Academy · Lekcja

Bloki DO i kod anonimowy

Uruchamiać doraźny kod PL/pgSQL za pomocą bloków DO, zarządzać cytowaniem dollar-quoting i używać bloków DO do jednorazowych migracji

Lekcja 3 z 413 kroki

Bloki DO i kod anonimowy to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Czym jest blok DO?

Blok DO pozwala uruchamiać PL/pgSQL bez definiowania nazwanej funkcji. Doskonale nadaje się do jednorazowych migracji i skryptów ad hoc.

Podstawowy blok DO

Minimalna składnia:

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

Cytowanie dolarowe

Ogranicznik $$ pozwala uniknąć uciekania apostrofów. W przypadku zagnieżdżonego kodu można użyć etykiety:

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

Warunkowe DDL

Dodaj kolumnę tylko wtedy, gdy jeszcze nie istnieje:

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

Pętle na potrzeby migracji zbiorczej

Wykonaj zbiorczą aktualizację ogromnej tabeli:

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

Dynamiczny SQL z EXECUTE

Bezpiecznie buduj ciągi SQL za pomocą format() i 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 $$;

Kontrola transakcji wewnątrz DO

Starsze wersje PG: blok DO działa w ramach jednej niejawnej transakcji. PG 11+ pozwala na COMMIT/ROLLBACK wewnątrz procedur (CALL), ale nie w DO. W przypadku migracji zbiorczych z zatwierdzaniem zmian należy użyć procedury.

Procedury a DO

  • DO — anonimowy, uruchamiany raz, w ramach bieżącej transakcji
  • PROCEDURE — nazwany, obsługuje COMMIT/ROLLBACK, wywoływany za pomocą CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
  -- can COMMIT here
END $$;

CALL migrate_users();

Obsługa błędów

Bloki EXCEPTION działają tak samo jak w nazwanych funkcjach:

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

Nie należy używać DO do powtarzanych zadań

Jeśli ta sama logika będzie uruchamiana więcej niż raz, należy zdefiniować funkcję lub procedurę. DO służy do jednorazowych operacji.

Używanie DO w migracjach

Większość narzędzi do migracji (Flyway, Sqitch) uruchamia zwykły SQL. Bloki DO pozwalają osadzać logikę sterującą bez tworzenia osobnych funkcji.

Podsumowanie

Bloki DO to ad hoc PL/pgSQL.

  • Pojedyncze anonimowe uruchomienie
  • Doskonale nadają się do warunkowego DDL i migracji
  • Należy uważać na cytowanie dolarowe
  • Do kontroli transakcji należy używać PROCEDURE

Szybki sprawdzian

Chcą Państwo uruchomić PL/pgSQL raz podczas migracji bez tworzenia nazwanej funkcji. Jakiej konstrukcji należy użyć?

Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
46
Lekcje
183

Często zadawane pytania

Czy lekcja „Bloki DO i kod anonimowy” jest bezpłatna?

Tak — pełny tekst „Bloki DO i kod anonimowy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Bloki DO i kod anonimowy”?

Uruchamiać doraźny kod PL/pgSQL za pomocą bloków DO, zarządzać cytowaniem dollar-quoting i używać bloków DO do jednorazowych migracji Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Bloki DO i kod anonimowy”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowa triggerów: BEFORE/AFTER, FOR EACH ROW
  2. Podstawy funkcji PL/pgSQL
  3. Bloki DO i kod anonimowy
  4. Audytowanie tabel za pomocą triggerów
← Powrót do SQL Academy