Valores DEFAULT e colunas geradas
Forneça valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') e calcule valores dinamicamente com colunas GENERATED ALWAYS AS.
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 beforeColunas 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-filledtsvector 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 DEFAULTPadrõ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?
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
- Restrições NOT NULL e CHECK
- Restrições UNIQUE e chaves compostas
- FOREIGN KEY e ações referenciais
- Valores DEFAULT e colunas geradas