</>
Plan du cours — 2/64

Créer une table et choisir ses types

Débutant

Le choix du type est une décision de modélisation : il fixe la place occupée, les comparaisons possibles et les index utilisables.

CREATE TABLE utilisateurs (
    id          bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    email       text        NOT NULL UNIQUE,
    nom         text        NOT NULL,
    actif       boolean     NOT NULL DEFAULT true,
    solde       numeric(12, 2) NOT NULL DEFAULT 0,
    preferences jsonb       NOT NULL DEFAULT '{}',
    cree_le     timestamptz NOT NULL DEFAULT now()
);

Les types à connaître#

BesoinTypeRemarque
Entiersinteger, bigint (smallint)bigint pour les identifiants : 2³¹ est vite atteint
TextetextPas de raison d'utiliser varchar(n) sans contrainte métier : même performance
Argent, quantités exactesnumeric(12, 2)Jamais float/double precision : erreurs d'arrondi
Booléenbooleantrue, false, NULL
Date et heuretimestamptzUn instant absolu, stocké en UTC
Date seuledate
Identifiant globaluuidUtile pour l'exposition externe ou la génération côté client
Données semi-structuréesjsonbIndexable, à utiliser avec modération
Listes simplesinteger[], text[]Pratique, mais moins relationnel

Piège : timestamp (sans tz) ne stocke aucun fuseau : la même valeur peut désigner des instants différents selon qui l'a écrite. Utilisez timestamptz par défaut.