SQL Academy · Aula

Valores DEFAULT e colunas geradas

Forneça valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') e calcule valores dinamicamente com colunas GENERATED ALWAYS AS.

Aula 4 de 413 etapas

Valores DEFAULT e colunas geradas é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 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.

DEFAULT: preenche automaticamente valores ausentes

Quando INSERT omite uma coluna, o valor DEFAULT é usado:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  status TEXT NOT NULL DEFAULT 'active',
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

DEFAULTs comuns

Padrões que você usará em todos os lugares:

created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
is_active BOOLEAN NOT NULL DEFAULT true
status TEXT NOT NULL DEFAULT 'pending'

Adicionando um DEFAULT depois

As linhas existentes não são preenchidas novamente por padrão — somente novas inserções usam o valor DEFAULT:

ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;

Adicionando NOT NULL com DEFAULT

O PostgreSQL 11+ permite adicionar rapidamente colunas NOT NULL com um DEFAULT constante — a tabela não é regravada:

ALTER TABLE users
  ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow before

Colunas geradas calculadas (STORED)

Uma coluna cujo valor é calculado automaticamente a partir de outras colunas:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  qty INT NOT NULL,
  unit_price NUMERIC(10,2) NOT NULL,
  total NUMERIC(12,2) GENERATED ALWAYS AS (qty * unit_price) STORED
);

INSERT INTO orders (qty, unit_price) VALUES (3, 9.99);
SELECT * FROM orders;       -- total is auto-filled

tsvector gerado para pesquisa de texto completo

Um ótimo uso para colunas geradas STORED:

ALTER TABLE articles
  ADD COLUMN search_doc tsvector
    GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN(search_doc);

Colunas geradas virtuais

Atualmente, o PostgreSQL oferece suporte apenas a STORED (as colunas virtuais virão em versões futuras). Outros bancos de dados (MySQL) oferecem suporte a colunas VIRTUAL, que são calculadas no momento do SELECT.

Você não pode fazer INSERT em colunas geradas

Tentar escrever em uma delas gera um erro — elas são calculadas, não armazenadas por você:

INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULT

Padrões baseados em sequências

SERIAL/BIGSERIAL é uma abreviação de "padrão obtido de uma sequência":

-- Roughly equivalent:
CREATE TABLE t (id BIGSERIAL PRIMARY KEY);

-- =>
CREATE SEQUENCE t_id_seq;
CREATE TABLE t (id BIGINT PRIMARY KEY DEFAULT nextval('t_id_seq'));
ALTER SEQUENCE t_id_seq OWNED BY t.id;

Colunas IDENTITY

A forma padrão do SQL para definir uma identidade:

CREATE TABLE t (
  id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT
);

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT e lógica de negócio

Mantenha os valores padrão simples. A lógica complexa pertence ao código da aplicação ou a um gatilho BEFORE INSERT.

Resumo

DEFAULT preenche os valores ausentes; GENERATED calcula valores a partir de outras colunas.

  • NOW(), gen_random_uuid(), literais constantes
  • Colunas STORED calculadas são excelentes para dados derivados
  • Colunas de identidade são o padrão moderno para PK

Verificação rápida

Qual cláusula faz com que uma coluna seja preenchida automaticamente com o horário atual no INSERT quando nenhum valor é fornecido?

Grátis para começar

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 “Valores DEFAULT e colunas geradas” é grátis?

Sim — o texto completo de “Valores DEFAULT e colunas geradas” é 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 “Valores DEFAULT e colunas geradas”?

Forneça valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') e calcule valores dinamicamente com colunas GENERATED ALWAYS AS. 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 4 de 4.

Quanto tempo leva a aula “Valores DEFAULT e colunas geradas”?

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

  1. Restrições NOT NULL e CHECK
  2. Restrições UNIQUE e chaves compostas
  3. FOREIGN KEY e ações referenciais
  4. Valores DEFAULT e colunas geradas
← Voltar para SQL Academy