Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA

Aula 1 de 6

PostgreSQL: tabelas, linhas, colunas e tipos

Entenda como o PostgreSQL organiza dados relacionais, crie uma tabela com tipos adequados e confira linhas com uma consulta SELECT.

44 minutos · leitura + prática · nível iniciante

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
Uma tabela relaciona colunas id, nome e cidade em linhas.

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:

sql
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

sql
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:

sql
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:

sql
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.

Pronto para testar

Resultado

Pare e pense

O que uma coluna representa em uma tabela relacional?

Escolha uma resposta
Missão da aula

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 →