Skip to content

Types de données PostgreSQL

PostgreSQL propose une grande variété de types de données. Voici une liste exhaustive des principaux types disponibles, classés par catégorie.

1. Types numériques

TypeDescriptionExemple de valeur
smallintEntier sur 2 octets (plage : -32 768 à 32 767)42
integerEntier sur 4 octets (plage : -2 147 483 648 à 2 147 483 647)42
bigintEntier sur 8 octets (plage : -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807)9223372036854775807
decimalNombre décimal exact, précision variable (ex: decimal(10,2))12345678.90
numericÉquivalent à decimal12345678.90
realNombre à virgule flottante sur 4 octets3.14159
double precisionNombre à virgule flottante sur 8 octets3.141592653589793
smallserialAuto-incrément sur 2 octets (1 à 32 767)42
serialAuto-incrément sur 4 octets (1 à 2 147 483 647)42
bigserialAuto-incrément sur 8 octets (1 à 9 223 372 036 854 775 807)9223372036854775807

TIP

  • serial est un type integer associé à une séquence
  • bigserial est un type bigint associé à une séquence

La séquence associé est créé automatiquement lors de la création ou modification de la table

2. Types monétaires

TypeDescriptionExemple de valeur
moneyMontant monétaire (avec symbole de devise)$1234.56

WARNING

Attention ce type est fortement dépendant de la locale du serveur de base de données.

Si vous utilsier ce type, et que vous avez besoin de faire une sauvegarde et restauration, il faut vous assurer que lc_monetary est la même entre le serveur ou a été faite la sauvegarde et celui ou la base de données est restaurée.

3. Types de caractères

TypeDescriptionExemple de valeur
character(n)Chaîne de longueur fixe (rempli d'espaces si nécessaire)'PostgreSQL'
varchar(n)Chaîne de longueur variable (limite n)'PostgreSQL'
textChaîne de longueur illimitée'PostgreSQL'
char(n)Équivalent à character(n)'SQL'
character varyingÉquivalent à varchar'PostgreSQL'

4. Types binaires

TypeDescriptionExemple de valeur
byteaChaîne binaire (octets bruts)'\xDEADBEEF'

5. Types date/heure

TypeDescriptionExemple de valeur
dateDate (sans heure)'2025-09-12'
timeHeure (sans date)'14:30:00'
time with time zoneHeure avec fuseau horaire'14:30:00+02'
timestampDate et heure (sans fuseau horaire)'2025-09-12 14:30:00'
timestamp with time zoneDate et heure avec fuseau horaire'2025-09-12 14:30:00+02'
intervalDurée ou intervalle de temps'1 day 2 hours'

6. Types booléens

TypeDescriptionExemple de valeur
booleanVrai ou fauxtrue, false, 1, 0

Valeur vrai

Vrai peut être représenté avec les valeurs suivantes

  • true
  • yes
  • on
  • t
  • 1
sql
SELECT 'true'::boolean as true_boolean, 'yes'::boolean as yes_boolean, 
       'on'::boolean as on_boolean, 1::boolean as int_boolean, 
       't'::boolean as t_boolean;

Résultat

true_booleanyes_booleanon_booleanint_booleant_boolean
✔️✔️✔️✔️✔️

Valeur faux

Faux peut être représenté avec les valeurs suivantes

  • false
  • no
  • off
  • f
  • 0
sql
SELECT 'false'::boolean as false_boolean, 'no'::boolean as no_boolean, 
       'off'::boolean as off_boolean, 0::boolean as int_boolean,
       'f'::boolean as f_boolean;

Résultat

false_booleanno_booleanoff_booleanint_booleanf_boolean

7. Types énumérés

TypeDescriptionExemple de valeur
enumType personnalisé avec valeurs prédéfinies'rouge', 'vert'

8. Types géométriques

TypeDescriptionExemple de valeur
pointPoint géométrique (x, y)(10.0, 20.0)
lineLigne infinie{(10.0,20.0),(30.0,40.0)}
lsegSegment de ligne[(10.0,20.0),(30.0,40.0)]
boxRectangle((10.0,20.0),(30.0,40.0))
pathChemin (ligne brisée)[(10.0,20.0),(30.0,40.0)]
polygonPolygone((10.0,20.0),(30.0,40.0))
circleCercle<(10.0,20.0),5.0>

9. Types réseau

TypeDescriptionExemple de valeur
cidrAdresse IP réseau (CIDR)'192.168.1.0/24'
inetAdresse IP (IPv4 ou IPv6)'192.168.1.1'
macaddrAdresse MAC'08:00:2b:01:02:03'
macaddr8Adresse MAC (format EUI-64)'00:00:08:00:2b:01:02:03'

10. Types de bits

TypeDescriptionExemple de valeur
bit(n)Chaîne de bits de longueur fixeB'1010'
bit varyingChaîne de bits de longueur variableB'101010'

11. Types de texte et recherche

TypeDescriptionExemple de valeur
tsvectorVecteur de texte pour recherche full-text'fat' 'cat' 'rat'
tsqueryRequête de recherche full-text'fat & cat'

12. Types UUID

TypeDescriptionExemple de valeur
uuidIdentifiant unique universel'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'

13. Types JSON

TypeDescriptionExemple de valeur
jsonDonnées JSON (texte brut)'{"nom": "PostgreSQL"}'
jsonbDonnées JSON binaires (indexables)'{"nom": "PostgreSQL"}'

14. Types XML

TypeDescriptionExemple de valeur
xmlDonnées XML'<nom>PostgreSQL</nom>'

15. Types composites

TypeDescriptionExemple de valeur
compositeType personnalisé (créé avec CREATE TYPE)(valeur1, valeur2)

Création d’un type composite

Supposons que l'on veut créer un type pour représenter une adresse, et stocker:

  • le nom de la rue
  • la ville
  • le code postal
  • le pays
  • le numéro de la rue

Nous allons donc créer le type ci-dessous

sql
CREATE TYPE adresse_type AS (
    rue VARCHAR(100),
    ville VARCHAR(50),
    code_postal CHAR(5),
    pays VARCHAR(50),
    numero INTEGER
);

Utilisation dans une table

On peut utiliser ce type comme colonne d’une table

sql
CREATE TABLE clients (
   id SERIAL PRIMARY KEY,
   nom VARCHAR(100) NOT NULL,
   adresse adresse_type
);

Insertion de données

Pour insérer une valeur de type composite, on utilise la syntaxe (val1, val2, ...):

sql
INSERT INTO clients (nom, adresse)
VALUES (
    'Jean Dupont',
    ('Rue de Paris', 'Paris', '75000', 'France', 123)::adresse_type
);

Accès aux champs d’un type composite

Pour accéder à un champ spécifique:

sql
SELECT nom, (adresse).ville FROM clients;

Résultat

idnomadresse
1Jean Dupont(Rue de Paris,Paris,75000,France,123)

Mise à jour d’un champ composite

Pour mettre à jour un seul champ de la colonne du type composite :

sql
UPDATE clients
SET adresse.pays = 'Espagne'
WHERE nom = 'Jean Dupont';

TIP

Vous remarquerez que dans le cas de l'UPDATE, nous n'avons pas mis de parenthèse à adresse

Nous avons maintenant le résultat dans la table

idnomadresse
1Jean Dupont(Rue de Paris,Paris,75000,Espagne,123)

par contre si l'on avait besoin de faire une incrémentation d'un élement du type composite par exemple, nous aurions du utiliser la syntaxe suivante.

sql
UPDATE clients
SET adresse.numero = (adresse).numero + 1
WHERE nom = 'Jean Dupont';

TIP

Dans la partie gauche du SET (entre le SET et le =), nous avons la colonne de la table donc les parenthères ne sont pas nécéssaire, par contre dans la partie nous pourrions avoir le nom d'un table (Voir UPDATE ... FROM ...), donc il faut indiquer que l'on est sur une colonne

Nous avons maintenant le résultat dans la table

idnomadresse
1Jean Dupont(Rue de Paris,Paris,75000,Espagne,124)

16. Types de plage

TypeDescriptionExemple de valeur
int4rangePlage d'entiers[1, 10]
int8rangePlage de bigint[1, 10000000000]
numrangePlage de nombres[1.0, 10.0]
tsrangePlage de timestamp (sans fuseau horaire)['2025-01-01', '2025-12-31']
tstzrangePlage de timestamp avec fuseau horaire['2025-01-01', '2025-12-31']
daterangePlage de dates['2025-01-01', '2025-12-31']

17. Types d'identifiants d'objet

TypeDescriptionExemple de valeur
oidIdentifiant d'objet PostgreSQL12345
regprocNom de fonction (avec surcharge)'foobar(integer)'
regclassNom de table'ma_table'

18. Types pseudo-types

TypeDescriptionExemple de valeur
anyPeut correspondre à n'importe quel type(utilisé dans les fonctions)
anyarrayPeut correspondre à n'importe quel tableau(utilisé dans les fonctions)
anyelementPeut correspondre à n'importe quel élément(utilisé dans les fonctions)

19. Types de tableau

TypeDescriptionExemple de valeur
arrayTableau d'un type de baseARRAY[1, 2, 3]

20. Types spécifiques à PostgreSQL

TypeDescriptionExemple de valeur
pg_lsnPosition dans le journal de transactions (WAL)'0/16B19F8'
txid_snapshotInstantané de transaction'100:101:...'

Informations complémentaires

  • Certains types nécessitent des extensions (uuid-ossp, pgcrypto, etc.).
  • PostgreSQL permet de créer des types personnalisés avec CREATE TYPE.
  • Pour plus de détails, consultez la [documentation officielle de PostgreSQL](https://docs.postgresql.fr/17/datatype.html type de données).

Articles sur le net

Mise à jour le:

Publier sous CC BY-SA 4.0.