Chapitre 3. Types

Table des matières
Types numériques
Type monétaire
Types caractère
Types date/time
Type Booléen
Types géométriques
Réseaux IP version 4 et adresses d'hôtes

Décrit les types disponibles dans Postgres.

Postgres possède un riche environnement de types de données. Les utilisateurs peuvent ajouter de nouveaux types en utilisant DEFINE TYPE.

Dans le contexte des types de données, les sections suivantes présenteront la compatibilité avec les standards SQL. Certains types Postgres correspondent directement au SQL92. Dans d'autres cas, les types définis par la syntaxe SQL92 sont mappés directement en types Postgres natifs. Plusieurs types natifs ont des formats évidents. Plusieurs sont spécifiques à Postgres, comme open et closed paths, ou ont plusieurs possibilités de format, comme les types date et time.

Tableau 3-1. Types de données Postgres

Postgres TypeSQL92 ou SQL3 TypeDescription
boolbooleanlogique booléenne (vrai/faux)
box boîte rectangulaire en 2 dimensions
char(n)character(n)chaîne de caractères de longueur fixe
cidr réseau IP v4 ou adresse d'hôte
circle cercle (donc en 2 dimensions)
datedatedate calendaire sans l'heure
float4/8float(p)nombre décimal en precision p
float8real, double precisionnombre décimal en double précision
inet réseau IP v4 ou adresse d'hôte
int2smallintentier signé sur 2 octets
int4int, integerentier signé sur 4 octets
int4decimal(p,s)numerique exact pour p <= 9, s = 0
int4numeric(p,s)numerique exact pour p == 9, s = 0
int8 entier signé sur 8 octets
line droite (donc infinie et en 2 dimensions)
lseg segment de droite (en 2 dimensions)
moneydecimal(9,2)somme d'argent, en style US courant
path ligne brisée (dans le plan)
point point (dans le plan)
polygon polygone (dans le plan)
serial identificateur unique (pour indexation et référence croisée)
timetimeheure du jour
timespanintervaltemps d'utilisation
timestamptimestamp with time zonedate/time
varchar(n)character varying(n)chaîne de caractères de longueur variable

Note

Les données de type cidr ou inet abritent théoriquement n'importe quelle sorte de numéro IP, mais seul IP v4 est implémenté dans cette version. Le version IP v6 le sera dans le futur.

Tableau 3-2. Fonctions Constantes Postgres

Postgres FunctionSQL92 ConstantDescription
getpgusername()current_usernom de l'utilisateur de la session
date('now')current_datedate de la transaction
time('now')current_timeheure de la transaction
timestamp('now')current_timestampdate et heure de la transaction

Postgres possède des fonctionnalités à la pointe du développement des SGBDR. En plus de la conformité au SQL3, de nombreux éléments de SQL92 sont aussi pris en charge. Bien que nous essayons de respecter la conformité au SQL92, certains aspects du standard ne sont pas encore implémentés. Postgres ne fait pas de gros efforts dans ce sens; cependant il s'agit de fonctionnalités peu utilisées ou de cas obscurs que la plupart des utilisateurs ne rencontrent jamais.

La plupart des fonctions d'entrée/sortie assurent certains contrôles d'erreur sur les données stockées selon les types de base (e.x., nombres entiers et décimaux). Certains opérateurs et fonctions (e.x., addition et multiplication) n'exécutent pas de contrôle d'erreur à la volée (en run-time) afin de ne pas réduire la vitesse d'exécution. Sur certains systèmes, par exemple, les opérateurs numériques pour certains types peuvent de manière silencieuse gérer les dépassements de capacité (underflow ou overflow).

Certaines fonctions d'entrée/sortie ne sont pas réversibles. Une fonction de sortie peut ainsi occasionner une perte de précision sur la donnée concernée.

Types numériques

Les types numériques consistent en entiers de 2- et 4- octets ainsi que de chiffres décimaux de 4- et 8- octets.

Tableau 3-3. Types numériques Postgres

Type NumériqueStockageDescriptionÉtendue
float44 octetsprécision variable6 décimales
float88 octetsprécision variable15 décimales
int22 octetsprécision fixe-32768 à +32767
int44 octetschoix habituel pour la précision fixe-2147483648 to +2147483647
int88 octetstrès grand spectre de précision fixe+/- > 18 décimales
serial4 octetsidentifiant ou référence croiséede 0 à +2147483647

Les types numériques offrent un jeu complet de fonctions et d'opérateurs arithmétiques correspondants. Voir Opérateurs numériques et Fonctions mathématiques pour plus d'information.

Le type serial est un cas spécial construit par Postgres depuis les autres composants existants. Il est utilisé pour créer des identifiants uniques pour les entrées de table. Spécifier :
CREATE TABLE tablename (colname SERIAL);
est équivalent a spécifier :
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename
    (colname INT4 DEFAULT nextval('tablename_colname_seq');
CREATE UNIQUE INDEX tablename_colname_key on tablename (colname);

Attention

La séquence implicite créée par le type serial ne sera pas automatiquement effacée quand la table est supprimée. Ainsi, les commandes suivantes exécutées selon cet ordre, échoueront probablement :
CREATE TABLE tablename (colname SERIAL);
DROP TABLE tablename;
CREATE TABLE tablename (colname SERIAL);
La séquence subsistera dans la base jusqu'à ce qu'elle soit supprimée explicitement en utilisant DROP SEQUENCE.

Le type int8 peut ne pas être disponible sur toutes les plateformes.