Ao terminar esta aula, você vai conseguir
- Diferenciar banco, schema, tabela, linha e coluna
- Escolher tipos básicos de acordo com o significado do dado
- Criar uma tabela, inserir linhas e consultar a saída
PostgreSQL é um sistema de gerenciamento de banco de dados objeto-relacional.
Nesta aula, você vai criar uma tabela, inserir linhas e ler uma resposta com
SELECT. Ao final, deve conseguir apontar o nome e o tipo de cada coluna e
explicar por que um valor inválido é rejeitado.
Pense numa planilha de cadastro: colunas indicam quais informações existem e cada linha registra um item. No PostgreSQL, a tabela representa uma relação, as colunas têm tipos e restrições, e as linhas contêm os valores. A analogia termina aí: o banco aplica regras, executa transações e consulta dados sem depender da ordem visual das linhas como uma planilha aberta.
Localize cada parte do banco
Uma instância do PostgreSQL pode hospedar vários bancos. Dentro de um banco,
schemas criam espaços de nomes; public costuma existir inicialmente.
Tabelas, índices e outros objetos vivem nesses schemas. Para começar, criaremos
cursos:
CREATE TABLE cursos (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
titulo text NOT NULL,
carga_horas integer NOT NULL,
ativo boolean NOT NULL DEFAULT true,
criado_em timestamptz NOT NULL DEFAULT now()
);bigint armazena inteiros grandes; a identidade gera valores para id.
text guarda texto sem um limite arbitrário. integer representa carga em
horas inteiras. boolean aceita estados lógicos. timestamptz representa um
instante no tempo e é adequado para eventos que serão exibidos em fusos
diferentes. O tipo nasce do significado, não do aspecto na tela.
NOT NULL impede ausência. DEFAULT fornece um valor quando a coluna é omitida.
PRIMARY KEY identifica cada linha e implica unicidade e não nulidade. Ainda
vamos aprofundar restrições na próxima aula.
Nomes também formam um contrato. Use uma convenção estável, como snake_case,
e evite criar identificadores entre aspas com mistura de maiúsculas: depois,
cada consulta precisará repetir exatamente as aspas e o caso. Nomeie pelo
significado, como criado_em, não pelo lugar atual na tela. A interface pode
mudar sem obrigar uma migração de coluna.
Insira dados e leia o retorno
INSERT INTO cursos (titulo, carga_horas)
VALUES
('HTML do zero', 4),
('CSS responsivo', 6)
RETURNING id, titulo, ativo;RETURNING mostra as linhas criadas sem uma consulta separada. A saída esperada
tem IDs distintos e ativo igual a true, recebido do valor padrão. Não
dependa de os IDs começarem em um ou serem consecutivos: sequências podem ter
lacunas após tentativas e concorrência.
Agora leia colunas específicas:
SELECT titulo, carga_horas
FROM cursos
ORDER BY titulo ASC;Sem ORDER BY, o banco não promete uma ordem. O fato de uma execução parecer
seguir a inserção não vira contrato para a próxima.
Faça o tipo proteger o significado
Execute num PostgreSQL de prática:
INSERT INTO cursos (titulo, carga_horas)
VALUES ('Curso inconsistente', 'seis');O servidor tenta converter seis para inteiro e produz erro. Esse erro é útil:
a linha não entra com um tipo que quebraria somas e comparações. A aplicação
deve validar antes para orientar a pessoa, e o banco mantém a última barreira.
Texto recebido da interface também deve chegar como parâmetro, não concatenado
diretamente ao comando SQL.
O laboratório desta página é um simulador didático. Ele lê um objeto JSON e
entende apenas SELECT simples, colunas, WHERE, ORDER BY e LIMIT. Não é
PostgreSQL, não cria tabelas, não persiste dados, não aplica tipos nem executa
transações. Execute a consulta inicial e espere três linhas em ordem alfabética.
Troque LIMIT 3 por LIMIT 2 e preveja quais permanecem.
Sua missão é desenhar aulas com quatro colunas, inserir duas linhas e testar
um valor inválido em ambiente descartável. Registre comando, resultado esperado
e resultado observado. Na próxima aula, você ligará tabelas com chaves e fará o
banco proteger relações do negócio.
Laboratório ao vivo
Leia a primeira tabela de cursos
Execute o SELECT, troque as colunas e o limite. Este é um simulador de SQL básico no navegador, não uma conexão com PostgreSQL real.
Resultado
Pare e pense
O que uma coluna representa em uma tabela relacional?
A coluna define um atributo da relação e seu domínio de valores. Cada linha fornece um valor ou NULL quando isso é permitido.
Faça sem copiar
Modele uma tabela de aulas com id, título, duração e publicação. Insira duas linhas válidas e descreva um valor que o tipo de cada coluna deve rejeitar.
Fontes para consultar
Terminou a missão?
Marque apenas quando você conseguir explicar o conceito e concluir o desafio. O progresso fica salvo somente neste navegador.
Próxima: Modele PostgreSQL com chaves e restrições →