Tous les types de colonnes PostgreSQL courants, regroupés par famille : nombres entiers, décimaux, texte, temps, booléens et UUID, JSON, adresses réseau, types composites et types d'extension. Chaque ligne montre ce que le type stocke et quand le choisir.
PostgreSQL propose des dizaines de types, mais la conception quotidienne des schémas en utilise un noyau. Les choix récurrents sont : integer contre numeric pour les nombres, varchar contre text pour les chaînes (text convient en général), timestamp contre timestamptz (préférez timestamptz pour tout ce qui est réel) et json contre jsonb (préférez jsonb, binaire et indexable). Choisissez le type le plus spécifique qui convient encore ; la base l'appliquera pour vous.
Tableau de référence · 46 entrées
Types de données PostgreSQLExplained
46 of 46 rows
Nombres entiers
Un entier sur 2 octets, de -32768 à 32767.
Rare ; uniquement pour économiser de l'espace.
Un entier sur 4 octets, environ plus ou moins 2 milliards.
La colonne d'entiers par défaut.
Un entier sur 8 octets, environ plus ou moins 9 quintillions.
Très grands compteurs ou identifiants externes.
Un entier sur 4 octets à incrémentation automatique.
Clés auto-numérotées historiques ; depuis PG 10, GENERATED AS IDENTITY est le remplacement recommandé.
Les variantes sur 2 et 8 octets de serial.
Numérotation automatique alignée sur une colonne smallint ou bigint.
Un entier que la table génère pour vous (GENERATED ALWAYS AS IDENTITY).
Le serial moderne ; standard SQL et plus sûr contre les insertions manuelles.
Décimaux et flottants
Décimaux exacts à précision arbitraire.
L'argent et tout contexte où les erreurs d'arrondi sont inacceptables.
Un flottant simple précision sur 4 octets.
Valeurs scientifiques approximatives où la précision n'est pas critique.
Un flottant double précision sur 8 octets.
Géospatial, statistiques et valeurs de features ML.
Un montant monétaire avec des paramètres régionaux fixes.
Rarement ; numeric avec un code devise côté application est plus portable.
Texte
Texte à longueur fixe, complété par des espaces.
Codes de largeur connue ; rarement nécessaire.
Texte à longueur variable avec une limite facultative.
Chaînes bornées comme les noms d'utilisateur ou les e-mails.
Texte à longueur variable sans limite de taille.
La colonne de chaîne passe-partout ; aucune pénalité de performance face à varchar.
Temps
Une date de calendrier sans heure.
Anniversaires et échéances.
Une heure du jour, avec ou sans fuseau horaire.
Alarmes quotidiennes ou horaires d'ouverture.
Date et heure sans fuseau horaire.
Schémas historiques ; à éviter pour du travail neuf.
Date et heure stockées en UTC, affichées dans le fuseau du client.
La valeur par défaut pour tout instant du monde réel ; à préférer à timestamp.
Une durée, par exemple 2 jours ou 3 heures.
Durées et arithmétique de dates.
Booléens, UUID et octets
Vrai ou faux.
Indicateurs et interrupteurs.
Un identifiant universel unique sur 128 bits.
Identifiants non séquentiels sûrs à exposer (générés dans l'application ou avec gen_random_uuid).
Octets binaires bruts.
Blobs, images et charges opaques ; préférez le stockage objet pour les gros fichiers.
Chaînes de bits à longueur fixe ou variable.
Indicateurs compactés et champs de protocole ; une simple valeur activé/désactivé reste boolean.
JSON et semi-structuré
JSON analysé dans une forme binaire indexable.
Données flexibles ou imbriquées ; la colonne JSON recommandée (supporte les index GIN).
JSON conservé comme texte d'origine.
Rare ; uniquement pour préserver l'ordre des clés ou les espacements exacts.
Texte XML.
Intégrations historiques qui exigent XML.
Une expression de chemin compilée pour parcourir des données JSON.
Filtrage dans jsonb avec jsonb_path_query et les opérateurs SQL/JSON.
Réseau et recherche
Une adresse hôte IPv4 ou IPv6.
Stocker les IP de clients ou de serveurs.
Un bloc réseau IP, par exemple 10.0.0.0/24.
Règles de pare-feu et plages de sous-réseaux.
Une adresse MAC sur 6 ou 8 octets (EUI-64).
Identifiants d'appareils et d'interfaces réseau.
Texte prétraité pour la recherche plein texte.
La recherche intégrée de Postgres avant d'adopter un moteur de recherche dédié.
Termes de recherche combinés avec les opérateurs AND, OR et préfixe.
La moitié requête de la recherche plein texte, confrontée à un tsvector avec @@.
Une position dans le journal d'écriture anticipée, le log sequence number.
Suivi du retard de réplication et supervision des sauvegardes.
Composites et avancés
Un tableau de n'importe quel type de base, ex. integer[].
Listes de valeurs simples ; passez à une table enfant quand les éléments ont besoin de leurs propres colonnes.
Une valeur parmi une liste fixe que vous définissez.
Champs de statut avec un ensemble d'options stable.
Un type de ligne personnalisé composé de plusieurs champs.
Groupes de champs récurrents partagés entre tables.
Un intervalle continu entre deux bornes.
Plannings, tranches de prix et plages de versions, avec les opérateurs de chevauchement.
Un type de base enveloppé dans des contraintes que vous définissez.
Règles réutilisables comme un e-mail non vide, appliquées à chaque colonne qui l'utilise.
Une ligne anonyme de valeurs typées.
Retours de fonctions PL/pgSQL et résultats de requêtes intermédiaires.
Valeurs géométriques bidimensionnelles intégrées.
Géométrie plane simple ; les lieux du monde réel exigent PostGIS.
Un identifiant système d'objet sur 4 octets non signé.
Jointures entre catalogues système ; pas pour des colonnes applicatives.
Une chaîne d'identification interne de 63 caractères.
Requêtes sur les catalogues ; du text classique pour tout ce qui est visible par l'utilisateur.
Types d'extension
Paires clé/valeur de chaînes dans une seule valeur (extension).
Maps plats ; jsonb couvre mieux ce besoin aujourd'hui.
Un chemin de labels hiérarchique comme news.tech.ai (extension).
Arbres avec requêtes d'ancêtres et de descendants.
Du texte comparé sans tenir compte de la casse (extension).
Unicité insensible à la casse comme les e-mails, sans index sur lower().
Objets géographiques et géométriques de l'extension PostGIS.
Requêtes de distance, de contenance et d'index spatial.
Des fonctions d'extension qui génèrent des UUID.
Génération historique ; depuis PG 13, gen_random_uuid() est intégré.