Valores DEFAULT y columnas generadas
Proporcione valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') y calcule valores sobre la marcha con columnas GENERATED ALWAYS AS.
Valores DEFAULT y columnas generadas es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
DEFAULT: rellenado automático de valores faltantes
Cuando INSERT omite una columna, se usa DEFAULT:
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()
);DEFAULT habituales
Patrones que usará en todas partes:
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'Añadir un DEFAULT más adelante
Las filas existentes no se rellenan retroactivamente de forma predeterminada; solo las nuevas inserciones usan el valor predeterminado:
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;Añadir NOT NULL con DEFAULT
PostgreSQL 11+ permite añadir rápidamente columnas NOT NULL con un DEFAULT constante; no reescribe la tabla:
ALTER TABLE users
ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow beforeColumnas generadas calculadas (STORED)
Una columna cuyo valor se calcula automáticamente a partir de otras columnas:
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 generado para búsqueda de texto completo
Un uso excelente de las columnas generadas 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);Columnas generadas virtuales
Actualmente PostgreSQL solo admite STORED (las columnas virtuales llegarán en futuras versiones). Otras bases de datos (MySQL) admiten columnas VIRTUAL, que se calculan en el momento del SELECT.
No puede usar INSERT en columnas generadas
Intentar escribir en una de ellas es un error: se calculan, no se almacenan explícitamente:
INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULTValores predeterminados basados en secuencias
SERIAL/BIGSERIAL es una forma abreviada de decir «valor predeterminado procedente de una secuencia»:
-- 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;Columnas IDENTITY
La forma estándar de SQL de definir una identidad:
CREATE TABLE t (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT
);
-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.DEFAULT y lógica de negocio
Mantenga los valores predeterminados simples. La lógica compleja debe estar en el código de la aplicación o en un trigger BEFORE INSERT.
Resumen
DEFAULT completa los valores que faltan; GENERATED calcula valores a partir de otras columnas.
- NOW(), gen_random_uuid(), literales constantes
- Las columnas STORED calculadas son ideales para datos derivados
- Las columnas de identidad son el patrón moderno para las PK
Comprobación rápida
¿Qué cláusula hace que una columna se complete automáticamente con la hora actual al realizar un INSERT si no se proporciona ningún valor?
Aprende SQL con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 46
- Lecciones
- 183
Preguntas frecuentes
¿La lección «Valores DEFAULT y columnas generadas» es gratis?
Sí — el texto completo de «Valores DEFAULT y columnas generadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Valores DEFAULT y columnas generadas»?
Proporcione valores DEFAULT (NOW(), uuid_generate_v4(), 'pending') y calcule valores sobre la marcha con columnas GENERATED ALWAYS AS. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Valores DEFAULT y columnas generadas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Restricciones NOT NULL y CHECK
- Restricciones UNIQUE y claves compuestas
- FOREIGN KEY y acciones referenciales
- Valores DEFAULT y columnas generadas