Blocos DO e código anônimo
Execute PL/pgSQL ad hoc com blocos DO, gerencie a cotação com cifrões e use blocos DO para migrações pontuais.
Blocos DO e código anônimo é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
O que é um bloco DO?
Um bloco DO permite executar PL/pgSQL sem definir uma função nomeada. É perfeito para migrações pontuais e scripts avulsos.
Bloco DO básico
Sintaxe mínima:
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 $$;Delimitação com cifrões
O delimitador $$ evita o escape de aspas simples. Pode utilizar uma etiqueta para código aninhado:
DO $outer$
BEGIN
EXECUTE $inner$ SELECT 'embedded \'quotes\'' $inner$;
END;
$outer$;DDL condicional
Adicione uma coluna somente se ela não existir:
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 $$;Laços para migração em massa
Atualize uma tabela enorme em lotes:
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 dinâmico com EXECUTE
Crie cadeias de SQL com segurança usando 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 $$;Controle de transações dentro de DO
Em versões antigas do PG: um bloco DO é executado dentro de uma única transação implícita. O PG 11+ permite COMMIT/ROLLBACK dentro de procedimentos (CALL), mas não em DO. Para migrações em lotes com confirmações, utilize uma PROCEDURE.
Procedimentos versus DO
- DO — anônimo, executado uma vez, na transação atual
- PROCEDURE — nomeado, oferece suporte a COMMIT/ROLLBACK, chamado por meio de CALL
CREATE PROCEDURE migrate_users() LANGUAGE plpgsql AS $$
BEGIN
-- can COMMIT here
END $$;
CALL migrate_users();Tratamento de erros
Os blocos EXCEPTION funcionam da mesma forma que nas funções nomeadas:
DO $$
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'failed: %', SQLERRM;
END $$;Não utilize DO para tarefas repetidas
Se for executar a mesma lógica mais de uma vez, defina uma função ou um procedimento. DO destina-se a casos pontuais.
Utilize DO em migrações
A maioria das ferramentas de migração (Flyway, Sqitch) executa SQL simples. Os blocos DO permitem incorporar fluxo de controle sem funções separadas.
Recapitulação
Blocos DO são PL/pgSQL para uso pontual.
- Execução anônima única
- Ótimos para DDL condicional e migrações
- Tenha cuidado com a delimitação por cifrões
- Para controle de transações, utilize PROCEDURE
Verificação rápida
Deseja executar PL/pgSQL uma vez durante uma migração sem criar uma função nomeada. Qual construção deve utilizar?
Aprenda SQL com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 46
- Aulas
- 183
Perguntas Frequentes
A aula “Blocos DO e código anônimo” é grátis?
Sim — o texto completo de “Blocos DO e código anônimo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Blocos DO e código anônimo”?
Execute PL/pgSQL ad hoc com blocos DO, gerencie a cotação com cifrões e use blocos DO para migrações pontuais. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Blocos DO e código anônimo”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Anatomia de gatilhos: BEFORE/AFTER, FOR EACH ROW
- Fundamentos de funções PL/pgSQL
- Blocos DO e código anônimo
- Auditoria de tabelas com gatilhos