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 Type | SQL92 ou SQL3 Type | Description |
---|---|---|
bool | boolean | logique 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) | |
date | date | date calendaire sans l'heure |
float4/8 | float(p) | nombre décimal en precision p |
float8 | real, double precision | nombre décimal en double précision |
inet | réseau IP v4 ou adresse d'hôte | |
int2 | smallint | entier signé sur 2 octets |
int4 | int, integer | entier signé sur 4 octets |
int4 | decimal(p,s) | numerique exact pour p <= 9, s = 0 |
int4 | numeric(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) | |
money | decimal(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) | |
time | time | heure du jour |
timespan | interval | temps d'utilisation |
timestamp | timestamp with time zone | date/time |
varchar(n) | character varying(n) | chaîne de caractères de longueur variable |
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 Function | SQL92 Constant | Description |
---|---|---|
getpgusername() | current_user | nom de l'utilisateur de la session |
date('now') | current_date | date de la transaction |
time('now') | current_time | heure de la transaction |
timestamp('now') | current_timestamp | date 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.
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érique | Stockage | Description | Étendue |
---|---|---|---|
float4 | 4 octets | précision variable | 6 décimales |
float8 | 8 octets | précision variable | 15 décimales |
int2 | 2 octets | précision fixe | -32768 à +32767 |
int4 | 4 octets | choix habituel pour la précision fixe | -2147483648 to +2147483647 |
int8 | 8 octets | très grand spectre de précision fixe | +/- > 18 décimales |
serial | 4 octets | identifiant ou référence croisée | de 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); |
CREATE SEQUENCE tablename_colname_seq; CREATE TABLE tablename (colname INT4 DEFAULT nextval('tablename_colname_seq'); CREATE UNIQUE INDEX tablename_colname_key on tablename (colname); |
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 :
|
Le type int8 peut ne pas être disponible sur toutes les plateformes.