Blocchi DO e codice anonimo
Esegua codice PL/pgSQL ad hoc con blocchi DO, gestisca il dollar-quoting e utilizzi i blocchi DO per migrazioni occasionali.
Blocchi DO e codice anonimo è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Che cos'è un blocco DO?
Un blocco DO consente di eseguire PL/pgSQL senza definire una funzione con nome. È perfetto per migrazioni eseguite una sola volta e script ad hoc.
Blocco DO di base
Sintassi minima:
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 $$;Quotatura con il simbolo del dollaro
Il delimitatore $$ evita di dover fare l'escape degli apici singoli. Per il codice annidato può utilizzare un tag:
DO $outer$
BEGIN
EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;DDL condizionale
Aggiunga una colonna solo se non esiste:
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 $$;Cicli per migrazioni massive
Esegua un aggiornamento in batch su una tabella molto grande:
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 $$;SQL dinamico con EXECUTE
Costruisca le stringhe SQL in modo sicuro con format() e 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 $$;Controllo delle transazioni all'interno di DO
Nelle versioni precedenti di PG, un blocco DO viene eseguito all'interno di un'unica transazione implicita. PG 11+ consente COMMIT/ROLLBACK all'interno delle procedure (CALL), ma non in DO. Per migrazioni in batch con commit, utilizzi una procedura.
Procedure e DO a confronto
- DO — anonimo, eseguito una volta, nella transazione corrente
- PROCEDURE — con nome, supporta COMMIT/ROLLBACK, viene chiamato tramite CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
-- can COMMIT here
END $$;
CALL migrate_users();Gestione degli errori
I blocchi EXCEPTION funzionano come nelle funzioni con nome:
DO $$
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'failed: %', SQLERRM;
END $$;Non utilizzi DO per attività ripetute
Se deve eseguire la stessa logica più di una volta, definisca una funzione o una procedura. DO è pensato per operazioni occasionali.
Utilizzi DO nelle migrazioni
La maggior parte degli strumenti di migrazione (Flyway, Sqitch) esegue SQL semplice. I blocchi DO consentono di incorporare il controllo del flusso senza funzioni separate.
Riepilogo
I blocchi DO sono blocchi PL/pgSQL per operazioni ad hoc.
- Un'unica esecuzione anonima
- Ideali per DDL condizionale e migrazioni
- Presti attenzione alla quotatura con il simbolo del dollaro
- Per il controllo delle transazioni, utilizzi PROCEDURE
Verifica rapida
Desidera eseguire PL/pgSQL una sola volta durante una migrazione senza creare una funzione con nome. Quale costrutto deve utilizzare?
Domande Frequenti
La lezione «Blocchi DO e codice anonimo» è gratuita?
Sì — il testo completo di «Blocchi DO e codice anonimo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Blocchi DO e codice anonimo»?
Esegua codice PL/pgSQL ad hoc con blocchi DO, gestisca il dollar-quoting e utilizzi i blocchi DO per migrazioni occasionali. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Blocchi DO e codice anonimo»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW
- Nozioni fondamentali sulle funzioni PL/pgSQL
- Blocchi DO e codice anonimo
- Audit delle tabelle con i trigger