Créer une table et choisir ses types
DébutantLe 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#
| Besoin | Type | Remarque |
|---|---|---|
| Entiers | integer, bigint (smallint) | bigint pour les identifiants : 2³¹ est vite atteint |
| Texte | text | Pas de raison d'utiliser varchar(n) sans contrainte métier : même performance |
| Argent, quantités exactes | numeric(12, 2) | Jamais float/double precision : erreurs d'arrondi |
| Booléen | boolean | true, false, NULL |
| Date et heure | timestamptz | Un instant absolu, stocké en UTC |
| Date seule | date | |
| Identifiant global | uuid | Utile pour l'exposition externe ou la génération côté client |
| Données semi-structurées | jsonb | Indexable, à utiliser avec modération |
| Listes simples | integer[], text[] | Pratique, mais moins relationnel |
Piège :
timestamp(sanstz) ne stocke aucun fuseau : la même valeur peut désigner des instants différents selon qui l'a écrite. Utiliseztimestamptzpar défaut.