Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Avance rapide | Suivant |
PostgreSQL a un large choix de types de donn�es disponibles nativement. Les utilisateurs peuvent ajouter de nouveaux types � PostgreSQL en utilisant la commande CREATE TYPE.
Tableau 8-1 montre tous les types de donn�es g�n�raux disponibles nativement. La plupart des types de donn�es alternatifs list�s dans la colonne <<�Alias�>> sont les noms utilis�s en interne par PostgreSQL pour des raisons historiques. De plus, certains types de donn�es internes ou obsol�tes sont disponibles, mais ils ne sont pas list�s ici.
Tableau 8-1. Types de donn�es
Nom | Alias | Description |
---|---|---|
bigint | int8 | Entier sign� de 8 octets |
bigserial | serial8 | Entier de 8 octets � incr�mentation automatique |
bit | Suite de bits de longueur fixe | |
bit varying(n) | varbit(n) | Suite de bits de longueur variable |
boolean | bool | Bool�en (Vrai/Faux) |
box | Boite rectangulaire dans le plan | |
bytea | Donn�e binaire | |
character varying(n) | varchar(n) | Suite de caract�res de longueur variable |
character(n) | char(n) | Suite de caract�res de longueur fixe |
cidr | Adresse r�seau IPv4 ou IPv6 | |
circle | Cercle dans le plan | |
date | Date du calendrier (ann�e, mois, jour) | |
double precision | float8 | Nombre � virgule flottante de double pr�cision |
inet | Adresse d'ordinateur IPv4 ou IPv6 | |
integer | int, int4 | Entier sign� de 4 octets |
interval(p) | Interval de temps | |
line | Ligne infinie dans le plan (partiellement disponible) | |
lseg | Segment de droite dans le plan | |
macaddr | adresse MAC | |
money | montant d'une devise | |
numeric [ (p, s) ] | decimal [ (p, s) ] | Nombre exact de la pr�cision indiqu�e |
path | Chemin ouvert et ferm� dans le plan | |
point | Point g�om�trique dans le plan | |
polygon | Chemin g�om�trique ferm� dans le plan | |
real | float4 | Nombre � virgule flottante de simple pr�cision |
smallint | int2 | Entier sign� de 2 octets |
serial | serial4 | Entier de 4 octets � incr�mentation automatique |
text | Cha�ne de caract�res de longueur variable | |
time [ (p) ] [ without time zone ] | Heure du jour | |
time [ (p) ] with time zone | timetz | Heure du jour, avec fuseau horaire |
timestamp [ (p) ] [ without time zone ] | timestamp | Date et heure |
timestamp [ (p) with time zone | timestamptz | Date et heure, avec fuseau horaire |
Compatibilit�: Les types suivants sont conformes � la norme SQL: bit, bit varying, boolean, char, character varying, character, varchar, date, double precision, integer, interval, numeric, decimal, real, smallint, time (avec et sans fuseau horaire), timestamp (avec et sans fuseau horaire).
Chaque type de donn�es a une repr�sentation externe d�termin�e par ses fonctions d'entr�e et de sortie. De nombreux type de donn�es internes ont un format externe �vident. Cependant, certains types sont soit sp�cifiques � PostgreSQL, comme les chemins ouverts et ferm�s, ou ont diff�rents formats possibles, comme les types de donn�es de date et d'heure. Certaines fonctions d'entr�e et de sortie ne sont pas inversables: Le r�sultat de la fonction de sortie peut perdre de la pr�cision compar� � l'entr�e initiale.
Certains des op�rateurs et des fonctions (comme l'addition et la multiplication) n'effectuent pas de v�rification d'erreur � l'ex�cution, pour am�liorer la vitesse d'ex�cution. Dans certains syst�mes, pour certains types de donn�es, les op�rateurs num�riques peuvent causer des d�passements de pr�cision sans afficher erreur.
Les types num�riques sont constitu�s d'entiers de 2, 4 ou 8 octets, de nombre � virgule flottante de 4 ou 8 octets, et de d�cimaux � pr�cision fixe.
Tableau 8-2. Types num�riques
Nom | Taille de stockage | Description | �tendue |
---|---|---|---|
smallint | 2 octets | entier de faible �tendue | -32768 � +32767 |
integer | 4 octets | entiers les plus courants | -2147483648 � +2147483647 |
bigint | 8 octets | grands entiers | -9223372036854775808 � 9223372036854775807 |
decimal | variable | Pr�cision indiqu�e par l'utilisateur. Valeurs exactes | pas de limite |
numeric | variable | Pr�cision indiqu�e par l'utilisateur. Valeurs exactes | pas de limite |
real | 4 octets | Pr�cision variable. Valeurs inexactes | pr�cision de 6 d�cimales |
double precision | 8 octets | Pr�cision variable. Valeurs inexactes | pr�cision de 15 d�cimales |
serial | 4 octets | entier � incr�mentation automatique | 1 � 2147483647 |
bigserial | 8 octets | entier de grande taille � incr�mentation automatique | 1 � 9223372036854775807 |
La syntaxe des constantes pour les types num�riques est d�crite dans Section 4.1.2. Les types num�riques ont un ensemble complet d'op�rateurs arithm�tiques et de fonctions. R�f�rez vous � Chapitre 9 pour plus d'informations. Les sections suivantes d�crivent ces types en d�tail.
Les types smallint, integer, et bigint stockent des nombres entiers, c'est � dire sans d�cimale, de diff�rentes �tendues. Toute tentative d'y stocker une valeur trop grande ou trop petite produite une erreur.
Le type integer est le plus courant. Il offre un bon compromis entre capacit�, espace utilis� et performances. Le type smallint n'est utilis� que si l'�conomie d'espace disque est le premier crit�re de choix. Le type bigint ne doit �tre utilis� que si le type integer n'offre pas une �tendue suffisante, car le type integer est nettement plus rapide.
Le type bigint peut ne pas fonctionner correctement sur toutes les plates-formes, car il repose sur la capacit� du compilateur � supporter les entiers de 8 octets. Sur une machine qui ne les supporte pas, bigint se comporte comme integer (mais prend bien huit octets d'espace de stockage). Ceci dit, nous ne connaissons pas de plate-forme raisonnable sur laquelle il en va ainsi.
SQL ne sp�cifie que les types de donn�es integer (ou int) et smallint. Le type bigint, et les noms de types int2, int4, et int8 sont des extensions, qui sont partag�es avec d'autres syst�mes de bases de donn�es SQL.
Note�: Si vous avez une colonne de type smallint ou bigint avec un index, vous pourrez rencontrer des probl�mes pour que le syst�me utilise cet index. Par exemple, une clause de la forme
... WHERE smallint_column = 42n'utilisera pas l'index, parce que le syst�me assigne le type integer � la constante 42, et PostgreSQL ne sait pour l'instant pas utiliser un index lorsque deux types de donn�es diff�rents sont utilis�s. Un contournement est d'entourer la constante entre apostrophes, comme:
... WHERE smallint_column = '42'Cela forcera le syst�me � retarder la r�solution de type, ce qui permettra d'assigner le bon type � la constante.
Le type numeric peut stocker des nombres avec jusqu'� 1000 chiffres significatifs et effectuer des calculs exacts. Il est sp�cialement recommander pour stocker les montants financiers et autres quantit�s pour lesquelles l'exactitude est indispensable. N�anmoins, le type numeric est tr�s lent compar� aux types � virgule flottante d�crits dans la section suivante.
Dans ce qui suit, on utilise les termes suivants: L'�chelle d'un numeric est le nombre de chiffres d�cimaux de la partie fractionnaire. La pr�cision d'un numeric est le nombre total de chiffres significatifs dans le nombre entier, c'est � dire avant et apr�s la virgule. Donc, le nombre 23,5141 a une pr�cision de 6 et une �chelle de 4. On peut consid�rer que les entiers ont une �chelle de 0.
La pr�cision et l'�chelle d'un num�rique peuvent �tre r�gl�s. Pour d�clarer une colonne de type num�rique, il faut utiliser la syntaxe.
NUMERIC(pr�cision, �chelle)
La pr�cision pour �tre strictement positive, l'�chelle positive ou nulle. Alternativement,
NUMERIC(pr�cision)
indique une �chelle de 0. Pr�ciser
NUMERIC
sans pr�cision ni �chelle cr�e une colonne dans laquelle on peut stocker des valeurs de n'importe quelle pr�cision ou �chelle, jusqu'� la limite de pr�cision. Une colonne de ce type ne forcera aucune valeur entr�e � une pr�cision particuli�re, alors que les colonnes numeric avec une �chelle forcent les valeurs entr�es � cette �chelle. (Le standard SQL demande une pr�cision par d�faut de 0, c'est � dire de forcer la transformation en entiers. Nous trouvons �a inutile. Si vous �tes soucieux de portabilit�, pr�cisez toujours la pr�cision et l'�chelle explicitement.)
Si la pr�cision ou l'�chelle d'une valeur sont sup�rieures � la pr�cision ou � l'�chelle d'une colonne, le syst�me tentera d'arrondir la valeur. Si la valeur ne peut �tre arrondie d'une mani�re qui corresponde aux limites d�clar�es, alors une erreur est produite.
Les types decimal et numeric sont �quivalents. Les deux types sont dans le standard SQL.
Les types de donn�es real et double precision sont des types num�riques � pr�cision variable inexacts. En pratique, ils sont g�n�ralement conformes � la norme IEEE 754 pour l'arithm�tique binaire � virgule flottante (respectivement simple et double pr�cision), dans la mesure o� les processeurs, le syst�me d'exploitation et le compilateur les supportent.
Inexact signifie que certaines valeurs ne peuvent �tre converties exactement dans le format interne, et sont stock�es sous forme d'approximations, si bien que stocker puis r�afficher ces valeurs peut faire appara�tre de l�gers �carts. Prendre en compte ces erreurs et la fa�on dont elles se propagent au cours des calculs est le sujet d'une branche enti�re des math�matiques et de l'informatique. Nous n'en dirons pas plus que ce qui suit:
Si vous avez besoin d'un stockage et de calculs exacts, comme pour les valeurs mon�taires, utilisez plut�t le type numeric.
Si vous voulez faire des calculs compliqu�s avec ces types pour quoi que ce soit d'important, et particuli�rement si vous comptez sur certains comportements aux limites (infinis, z�ro), alors vous devriez �tudier le comportement de votre plate-forme avec soin.
Tester l'�galit� de deux valeurs � virgule flottante peux ne pas donner le r�sultat attendu.
Sur la plupart des plates-formes, le type real a une �tendue d'au moins 1E-37 � 1E37 avec une pr�cision d'au moins 6 chiffres d�cimaux. Le type double precision a g�n�ralement une �tendue de 1E-307 � 1E+308 avec une pr�cision d'au moins 15 chiffres. Les valeurs trop grandes ou trop petites produisent une erreur. Un arrondi peut avoir lieu si la pr�cision d'un nombre en entr�e est trop grande. Les nombres trop proches de z�ro qui ne peuvent �tre repr�sent�s autrement que par z�ro produisent une erreur (underflow).
PostgreSQL autorise aussi la notation float du standard SQL, ainsi que float(p) pour indiquer des types num�riques inexacts. Ici, p indique la pr�cision minimale acceptable en chiffres binaires. PostgreSQL accepte float(1) � float(24), transform�s en type real et float(25) to float(53), transform�s en type double precision. Toute valeur de p hors de la zone de valeurs possible produit une erreur. float sans pr�cision est compris comme double precision.
Note�: Avant PostgreSQL 7.4, la pr�cision d'un float(p) �tait suppos�e indiquer une pr�cision en chiffres d�cimaux. Nous l'avons corrig�e pour respecter le standard SQL, qui indique que la pr�cision est indiqu�e en chiffres binaires. L'affirmation que les real et les double precision ont exactement 24 et 53 bits dans la mantisse est correcte pour les impl�mentations des nombres � virgule flottante respectant le standard IEEE. Sur les plates-formes non-IEEE, c'est peut-�tre un peu sous-estim�, mais pour plus de simplicit�, la gamme de valeurs pour p est utilis�e sur toutes les plates-formes.
Les types de donn�es serial et bigserial ne sont pas de vrais types, mais plut�t un raccourci de notation pour d�crire des colonnes d'identifiants uniques (similaires � la propri�t� AUTO_INCREMENT utilis�e par d'autres SGBD). Dans la version actuelle, indiquer
CREATE TABLE nom_de_table ( nom_de_colonne SERIAL );
est �quivalent � �crire :
CREATE SEQUENCE nom_de_table_colname_seq; CREATE TABLE nom_de_table ( nom_de_colonne integer DEFAULT nextval('nom_de_table_nom_de_colonne_seq') NOT NULL );
Ainsi, nous avons cr�� une colonne d'entiers et fait en sorte que ses valeurs par d�faut soient assign�es par un g�n�rateur de s�quence. Une contrainte NOT NULL est ajout�e pour s'assurer qu'une valeur Nulle ne puisse pas �tre explicitement ins�r�e. Dans la plupart des cas, vous voudrez aussi ajouter une contrainte UNIQUE ou PRIMARY KEY pour interdire que des doublons soient cr��s par accident, mais ce n'est pas automatique.
Note�: Avant PostgreSQL 7.3, serial sous entendait UNIQUE. Ce n'est plus automatique. Si vous souhaitez qu'une colonne serial soit unique ou soit une cl� primaire, il faut le pr�ciser, comme pour un autre type.
Pour ins�rer la valeur suivante de la s�quence dans la colonne serial, il faut faire en sorte d'utiliser la valeur par d�faut de la colonne. Cela peut se faire de deux fa�ons: soit en excluant cette colonne de la liste des colonnes de la commande INSERT, ou en utilisant le mot cl� DEFAULT.
Les types serial et serial4 sont identiques: ils cr�ent tous les deux des colonnes integer. Les types bigserial et serial8 fonctionnent de la m�me fa�on, et cr�ent des colonnes bigint. bigserial doit �tre utilis� si vous pensez utiliser plus de 231 identifiants dans toute la vie de la table.
La s�quence cr��e pour une colonne serial est
automatiquement supprim�e quand la colonne correspondante est
supprim�e, et ne peut l'�tre autrement. (Ce n'�tait
pas le cas avant la version 7.3 de
PostgreSQL. Notez que ce lien de
suppression automatique de s�quence ne fonctionnera pas pour
une base restaur�e d'une sauvegarde SQL (dump) ant�rieure � la
version 7.3. La sauvegarde ne contient en effet pas l'information
n�cessaire � l'�tablissement du lien de d�pendance.)
De plus, ce lien de d�pendance n'est mis que pour la colonne de
type serial elle m�me. Si d'autres colonnes r�f�rencent
la s�quence (par exemple en appellent la fonction
nextval
), elles ne peuvent plus fonctionner si la
s�quence est supprim�e.
Utiliser le type serial de cette fa�on n'est pas recommand�.
Si vous souhaitez remplir plusieurs colonnes avec le m�me g�n�rateur de
s�quence, cr�ez la s�quence ind�pendamment.
Pr�c�dent | Sommaire | Suivant |
LIMIT et OFFSET | Niveau sup�rieur | Types mon�taires |