SQL Academy · Oppitunti

DO-lohkot ja anonyymi koodi

Suorita tilapäistä PL/pgSQL-koodia DO-lohkoilla, hallitse dollar-quotingia ja käytä DO-lohkoja kertaluonteisiin migraatioihin.

Oppitunti 3/413 vaihetta

DO-lohkot ja anonyymi koodi on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on DO-lohko

DO-lohkon avulla voitte suorittaa PL/pgSQL-koodia määrittelemättä nimettyä funktiota. Se sopii erinomaisesti kertaluonteisiin migraatioihin ja tilapäisiin komentosarjoihin.

DO-lohkon perusteet

Minimaalinen syntaksi:

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

$$-erotin välttää heittomerkkien suojaamisen. Voitte käyttää tunnistetta sisäkkäistä koodia varten:

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

Ehdollinen DDL

Lisätkää sarake vain, jos sitä ei ole olemassa:

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

Silmukat massasiirrossa

Päivittäkää valtava taulu erissä:

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

Dynaaminen SQL EXECUTE-komennolla

Muodostakaa SQL-merkkijonot turvallisesti format()-funktion ja EXECUTE-komennon avulla:

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

Transaktioiden hallinta DO-lohkon sisällä

Vanhemmissa PG-versioissa DO-lohko suoritetaan yhdessä implisiittisessä transaktiossa. PG 11 ja uudemmat sallivat COMMIT- ja ROLLBACK-komennot proseduureissa (CALL), mutta eivät DO-lohkossa. Jos migraatiot on tarpeen suorittaa erissä ja vahvistaa niiden transaktiot, käyttäkää proseduuria.

Proseduurit ja DO

  • DO — anonyymi, suoritetaan kerran nykyisessä transaktiossa
  • PROCEDURE — nimetty, tukee COMMIT- ja ROLLBACK-komentoja, kutsutaan CALL-komennolla
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
  -- can COMMIT here
END $$;

CALL migrate_users();

Virheenkäsittely

EXCEPTION-lohkot toimivat samalla tavalla kuin nimetyissä funktioissa:

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

Älkää käyttäkö DO-lohkoa toistuviin tehtäviin

Jos sama logiikka suoritetaan useammin kuin kerran, määritelkää funktio tai prosed uuri. DO on kertaluonteisia ajoja varten.

Käyttäkää DO-lohkoa migraatioissa

Useimmat migraatiotyökalut, kuten Flyway ja Sqitch, suorittavat tavallista SQL:ää. DO-lohkoilla voitte upottaa ohjauslogiikan ilman erillisten funktioiden luomista.

Kertaus

DO-lohkot ovat tilapäistä PL/pgSQL-koodia.

  • Yksi anonyymi suoritus
  • Sopivat erinomaisesti ehdolliseen DDL:ään ja migraatioihin
  • Huomioikaa dollar-quoting
  • Käyttäkää transaktioiden hallintaan PROCEDURE-määritystä

Pikatarkistus

Haluatte suorittaa PL/pgSQL-koodia kerran migraation aikana luomatta nimettyä funktiota. Mitä rakennetta käytätte?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”DO-lohkot ja anonyymi koodi” ilmainen?

Kyllä – oppitunnin ”DO-lohkot ja anonyymi koodi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”DO-lohkot ja anonyymi koodi”?

Suorita tilapäistä PL/pgSQL-koodia DO-lohkoilla, hallitse dollar-quotingia ja käytä DO-lohkoja kertaluonteisiin migraatioihin. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”DO-lohkot ja anonyymi koodi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Triggerin rakenne: BEFORE/AFTER, FOR EACH ROW
  2. PL/pgSQL-funktioiden perusteet
  3. DO-lohkot ja anonyymi koodi
  4. Taulujen auditointi triggereillä
← Takaisin: SQL Academy