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
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
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

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

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, ...):

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:

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 :

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.

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.