O PostgreSQL não fala só SQL! Olha só: PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) é uma linguagem procedural de programação que já vem no PostgreSQL. Ela foi criada pra facilitar operações mais complexas usando queries SQL e estruturas de controle, tipo condições (IF, CASE) e loops (LOOP, FOR, WHILE).
PL/pgSQL e SQL são tipo uma linha de montagem automatizada e uma ferramenta manual, tipo um martelo. O SQL, igual ao martelo, é confiável. Só que pra cada prego, você tem que levantar o braço e bater de novo. Já o PL/pgSQL é a linha de montagem: você diz uma vez o que tem que fazer, e aí tudo rola sozinho — executa comandos, guarda coisas, checa se deu ruim, e segue em frente de boa. Pra que martelar cada prego se dá pra só assistir tudo funcionando? Fala sério, é um sonho, né?
Comparando PL/pgSQL com queries SQL normais
Bora entender qual é a diferença do PL/pgSQL pros SQLs simples.
SQL é ótimo quando você precisa fazer uma tarefa só: tipo buscar todos os alunos de uma tabela ou adicionar uma linha nova. Mas, quando começa a entrar lógica tipo "se isso, então aquilo" ou precisa repetir ações, o SQL começa a ficar complicado.
Por exemplo, imagina que você precisa:
- Checar se já existe um registro do aluno na tabela.
- Se existir — atualizar os dados.
- Se não existir — adicionar um registro novo.
Com SQL puro, você teria que escrever várias queries e tratar o resultado no lado do cliente. Com PL/pgSQL, dá pra colocar tudo numa procedure só, que roda direto no banco.
PL/pgSQL brilha mesmo em projetos mais complexos. Ele deixa você:
- guardar resultados intermediários em variáveis;
- tratar erros pra não deixar o banco "cair" quando rola algo inesperado;
- usar loops e condições pra rodar algoritmos mais cabulosos.
Onde usar PL/pgSQL
PL/pgSQL aparece bastante nos seguintes cenários:
Automatização de tarefas. Tipo criar registros no log automaticamente (
log) toda vez que algum dado é atualizado.Lógica de negócio. Você tem uma regra: todo aluno com mais de 5 faltas tem que ser marcado como "inativo" automaticamente. Por que não jogar essa regra numa função PL/pgSQL?
Analytics e relatórios. Ao invés de ficar puxando dados do banco pro app, você pode agregar tudo direto no servidor.
Triggers. PL/pgSQL é usado pra escrever triggers que fazem ações automáticas quando você insere, atualiza ou deleta dados.
Exemplo de uso do PL/pgSQL
Olha um exemplo de função que recebe dois números, soma e devolve o resultado:
CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
RETURN a + b;
END;
$$ LANGUAGE plpgsql;
Explicando:
CREATE FUNCTION add_numbers(a INT, b INT)— a gente cria uma função chamadaadd_numbersque recebe dois argumentos do tipoINT(inteiro).RETURNS INT— diz que a função devolve um inteiro.BEGIN ... END— é o bloco principal onde rola a lógica da função.RETURN a + b;— devolve o resultado da soma.
Pra chamar essa função, é só usar uma query SQL normal:
SELECT add_numbers(10, 20);
Resultado: 30.
Pegadinhas e limitações
PL/pgSQL é uma ferramenta poderosa, mas tem que usar com cuidado:
- Performance: funções muito complexas podem deixar o banco lento. Sempre testa e otimiza.
- Testes: erros nas funções podem passar batido até você rodar elas. Não esquece de testar!
- Legibilidade: funções e procedures grandes, cheias de lógica, podem ficar difíceis de entender. Escreve o código de um jeito que você consiga sacar daqui um mês.
Agora que você já tem uma ideia do que é PL/pgSQL, bora falar mais do seu sintaxe e das funções principais. Vamos aprender a criar blocos de código, declarar variáveis e trabalhar com tipos de dados nas próximas aulas. Bora programar direto no banco!
GO TO FULL VERSION