Valeurs DEFAULT et colonnes générées
Fournissez des valeurs DEFAULT (NOW(), uuid_generate_v4(), 'pending') et calculez des valeurs à la volée avec des colonnes GENERATED ALWAYS AS.
Valeurs DEFAULT et colonnes générées est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
DEFAULT : remplissage automatique des valeurs manquantes
Lorsque INSERT omet une colonne, la valeur DEFAULT est utilisée :
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 courants
Modèles que vous utiliserez partout :
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'Ajouter DEFAULT ultérieurement
Les lignes existantes ne sont pas complétées par défaut : seules les nouvelles insertions utilisent la valeur par défaut :
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;Ajouter NOT NULL avec DEFAULT
PostgreSQL 11+ permet d’ajouter rapidement des colonnes NOT NULL avec une valeur DEFAULT constante : la table n’est pas réécrite :
ALTER TABLE users
ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow beforeColonnes générées calculées (STORED)
Une colonne dont la valeur est calculée automatiquement à partir d’autres colonnes :
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 généré pour la recherche en texte intégral
Une excellente utilisation des colonnes générées 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);Colonnes générées virtuelles
PostgreSQL ne prend actuellement en charge que STORED, tandis que les colonnes virtuelles seront disponibles dans de futures versions. D’autres bases de données, comme MySQL, prennent en charge les colonnes VIRTUAL, dont la valeur est calculée au moment de SELECT :
Vous ne pouvez pas effectuer d’INSERT dans des colonnes générées
Tenter d’écrire dans l’une d’elles provoque une erreur : elles sont calculées et non stockées par vos soins :
INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULTValeurs par défaut fondées sur des séquences
SERIAL/BIGSERIAL est un raccourci pour « valeur par défaut provenant d’une séquence » :
-- 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;Colonnes IDENTITY
La manière standard en SQL de définir une identité :
CREATE TABLE t (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT
);
-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.DEFAULT et logique métier
Gardez les valeurs par défaut simples. La logique complexe doit se trouver dans le code de l’application ou dans un déclencheur BEFORE INSERT.
Récapitulatif
DEFAULT comble les valeurs manquantes ; GENERATED effectue un calcul à partir d’autres colonnes.
- NOW(), gen_random_uuid(), constantes littérales
- Les colonnes calculées STORED sont idéales pour les données dérivées
- Les colonnes d’identité constituent le modèle moderne pour une PK
Vérification rapide
Quelle clause remplit automatiquement une colonne avec l’heure actuelle lors d’un INSERT si aucune valeur n’est fournie ?
Questions Fréquemment Posées
La leçon « Valeurs DEFAULT et colonnes générées » est-elle gratuite ?
Oui — le texte complet de « Valeurs DEFAULT et colonnes générées » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Valeurs DEFAULT et colonnes générées » ?
Fournissez des valeurs DEFAULT (NOW(), uuid_generate_v4(), 'pending') et calculez des valeurs à la volée avec des colonnes GENERATED ALWAYS AS. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Valeurs DEFAULT et colonnes générées » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Contraintes NOT NULL et CHECK
- Contraintes UNIQUE et clés composites
- FOREIGN KEY et actions référentielles
- Valeurs DEFAULT et colonnes générées