PostgreSQL - Types de données
Bonjour à tous, futurs magiciens de bases de données ! ? Bienvenue dans notre passionnante aventure dans le monde des types de données PostgreSQL. En tant que votre professeur de sciences informatiques bienveillant du quartier, je suis ravi de vous guider à travers ce sujet fascinant. Ne vous inquiétez pas si vous êtes nouveaux en programmation - nous allons commencer par les bases et progresser pas à pas. Alors, prenez votre baguette virtuelle (clavier) et plongons dedans !
Types Numériques
Ah, les nombres - les briques de la informatique ! PostgreSQL offre une variété de types numériques pour répondre à différents besoins. Explorons-les avec quelques exemples amusants.
Types Entiers
PostgreSQL propose quatre types d'entiers :
Type | Taille de stockage | Plage |
---|---|---|
smallint | 2 octets | -32768 à +32767 |
integer | 4 octets | -2147483648 à +2147483647 |
bigint | 8 octets | -9223372036854775808 à +9223372036854775807 |
serial | 4 octets | 1 à 2147483647 |
Créons une table pour stocker des informations sur nos livres préférés :
CREATE TABLE favorite_books (
id serial PRIMARY KEY,
title VARCHAR(100),
publication_year smallint,
pages integer,
isbn bigint
);
Dans cet exemple :
-
id
utiliseserial
, qui s'incrémente automatiquement pour chaque nouvelle entrée. -
publication_year
utilisesmallint
car les livres ne sont pas si anciens (désolé, anciens manuscrits !). -
pages
utiliseinteger
pour la longueur des livres. -
isbn
utilisebigint
pour ces longs numéros ISBN.
Types à Virgule Flottante
Pour når vous avez besoin de précision décimale :
Type | Description |
---|---|
real | 6 décimales de précision |
double precision | 15 décimales de précision |
Ajoutons quelques détails supplémentaires à notre table de livres :
ALTER TABLE favorite_books
ADD COLUMN rating real,
ADD COLUMN price double precision;
Nous pouvons maintenant stocker les notes des livres (par exemple, 4,5 étoiles) et les prix précis.
Nombres à Précision Arbitraire
Pour når vous avez besoin d'une précision extrême :
CREATE TABLE scientific_constants (
name VARCHAR(50),
value numeric(1000, 900)
);
INSERT INTO scientific_constants (name, value)
VALUES ('Pi', 3.14159265358979323846264338327950288419716939937510);
Le numeric(1000, 900)
permet jusqu'à 1000 digits au total avec 900 après la virgule. Parfait pour les amateurs de pi !
Types Monétaires
L'argent fait le monde tourner, et PostgreSQL a exactement le type qu'il vous faut :
CREATE TABLE product_prices (
product_name VARCHAR(50),
price money
);
INSERT INTO product_prices (product_name, price)
VALUES ('Stylo de Luxe', '$9.99');
Le type money
gère automatiquement les symboles monétaires et les séparateurs de milliers.
Types de Caractères
Le texte est partout dans les bases de données. PostgreSQL offre trois principaux types de caractères :
Type | Description |
---|---|
character(n) | Longueur fixe, rempli de blancs |
varchar(n) | Longueur variable avec limite |
text | Longueur variable illimitée |
Utilisons ces types dans notre base de données de livres :
ALTER TABLE favorite_books
ADD COLUMN author character(50),
ADD COLUMN description varchar(500),
ADD COLUMN full_text text;
-
author
est fixé à 50 caractères (espérons que c'est suffisant pour "J.K. Rowling" !). -
description
peut varier mais ne dépassera pas 500 caractères. -
full_text
peut stocker tout le livre si nous le voulons (mais ne le faisons pas, d'accord ?).
Types de Données Binaires
Parfois, vous devez stocker des données binaires brutes. C'est là que rentre en jeu bytea
:
ALTER TABLE favorite_books
ADD COLUMN cover_image bytea;
-- Insérer une image (imaginons que c'est réellement des données binaires)
UPDATE favorite_books
SET cover_image = '\x89504E470D0A1A0A'
WHERE id = 1;
Cela nous permet de stocker directement les images de couverture dans la base de données.
Types Date/Heure
Le temps est essentiel, et PostgreSQL l'a couvert :
Type | Description |
---|---|
date | Date (pas d'heure de la journée) |
time | Heure de la journée (pas de date) |
timestamp | Date et heure |
interval | Intervalle de temps |
Repérons quand nous lisons nos livres préférés :
ALTER TABLE favorite_books
ADD COLUMN purchase_date date,
ADD COLUMN reading_start_time time,
ADD COLUMN last_read timestamp,
ADD COLUMN reading_duration interval;
UPDATE favorite_books
SET purchase_date = '2023-04-01',
reading_start_time = '20:30:00',
last_read = '2023-04-15 22:15:30',
reading_duration = '2 hours 30 minutes'
WHERE id = 1;
Nous pouvons maintenant analyser nos habitudes de lecture ! ?⏱️
Type Booléen
Vrai ou faux, 1 ou 0, oui ou non - parfois la vie est binaire :
ALTER TABLE favorite_books
ADD COLUMN is_favorite boolean;
UPDATE favorite_books
SET is_favorite = true
WHERE rating > 4.5;
Simple et efficace !
Type Énuméré
Lorsque vous avez un ensemble fixe d'options, les enums sont vos amis :
CREATE TYPE book_genre AS ENUM ('Fiction', 'Non-Fiction', 'Science', 'History');
ALTER TABLE favorite_books
ADD COLUMN genre book_genre;
UPDATE favorite_books
SET genre = 'Fiction'
WHERE id = 1;
Plus de fautes de frappe dans les noms de genres !
Types Géométriques
Pour tous les passionnés de formes :
CREATE TABLE geometric_objects (
id serial PRIMARY KEY,
name VARCHAR(50),
location point,
area box
);
INSERT INTO geometric_objects (name, location, area)
VALUES ('Ma Maison', '(10,20)', '((0,0),(100,100))');
Parfait pour cartographier votre campagne de Dungeons & Dragons !
Type d'Adresse IP
Dans notre monde interconnecté, stocker des informations réseau est crucial :
CREATE TABLE network_devices (
id serial PRIMARY KEY,
name VARCHAR(50),
ip inet,
mac macaddr
);
INSERT INTO network_devices (name, ip, mac)
VALUES ('Mon Routeur', '192.168.1.1', '08:00:2b:01:02:03');
Vous pouvez maintenant suivre tous ces appareils sur votre réseau !
Type de Chaîne de Bits
Parfois, vous avez besoin de travailler avec des bits bruts :
CREATE TABLE permissions (
user_id integer,
access_flags bit(8)
);
INSERT INTO permissions (user_id, access_flags)
VALUES (1, B'10110000');
Chaque bit peut représenter une permission différente. Combien est-ce que pour un stockage efficace ?
Type de Recherche Textuelle
PostgreSQL prend en charge la recherche full-text intégrée :
ALTER TABLE favorite_books
ADD COLUMN search_vector tsvector;
UPDATE favorite_books
SET search_vector = to_tsvector('english', title || ' ' || description);
CREATE INDEX textsearch_idx ON favorite_books USING GIN (search_vector);
Vous pouvez maintenant effectuer des recherches ultrarapides sur votre collection de livres !
Type UUID
Les Identifiants Universellement Uniques sont parfaits pour les systèmes distribués :
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE distributed_data (
id uuid DEFAULT uuid_generate_v4(),
data TEXT
);
INSERT INTO distributed_data (data) VALUES ('Some distributed data');
Plus de souci de collisions d'ID entre différents serveurs !
Type XML
Pour når vous avez besoin de stocker des données XML structurées :
CREATE TABLE xml_documents (
id serial PRIMARY KEY,
doc xml
);
INSERT INTO xml_documents (doc)
VALUES (
'<book>
<title>PostgreSQL for Beginners</title>
<author>Your Favorite Teacher</author>
</book>'
);
XML dans une base de données ? Pourquoi pas !
Type JSON
À l'ère des services web, JSON est roi :
ALTER TABLE favorite_books
ADD COLUMN metadata jsonb;
UPDATE favorite_books
SET metadata = '{"tags": ["educational", "fun"], "reviews": [{"user": "Alice", "rating": 5}, {"user": "Bob", "rating": 4}]}'
WHERE id = 1;
Le type jsonb
permet un stockage et une requête efficaces des données JSON.
Type Tableau
Parfois, vous avez besoin de stocker plusieurs valeurs dans une seule colonne :
ALTER TABLE favorite_books
ADD COLUMN keywords text[];
UPDATE favorite_books
SET keywords = ARRAY['database', 'programming', 'awesome']
WHERE id = 1;
Les tableaux vous permettent de stocker des listes de valeurs sans créer des tables séparées.
Types Composés
Créez vos propres types personnalisés en combinant des types existants :
CREATE TYPE address AS (
street VARCHAR(100),
city VARCHAR(50),
country VARCHAR(50)
);
ALTER TABLE favorite_books
ADD COLUMN publisher_address address;
UPDATE favorite_books
SET publisher_address = ROW('123 Book St', 'Libraryville', 'Bookland')
WHERE id = 1;
Les types composés vous aident à organiser les données liées plus logiquement.
Types d'Intervalle
Lorsque vous devez représenter une plage de valeurs :
CREATE TABLE hotel_bookings (
id serial PRIMARY KEY,
room_number integer,
stay daterange
);
INSERT INTO hotel_bookings (room_number, stay)
VALUES (101, '[2023-07-01, 2023-07-07)');
Le type daterange
rend facile la vérification des réservations superposées !
Types d'Identificateur d'Objet
Ces types sont utilisés internement par PostgreSQL :
CREATE TABLE table_info (
table_name VARCHAR(50),
oid oid
);
INSERT INTO table_info (table_name, oid)
SELECT 'favorite_books', 'favorite_books'::regclass::oid;
Bien que vous ne puissiez pas les utiliser souvent, ils sont essentiels aux opérations internes de PostgreSQL.
Types Pseudo
Ceux-ci ne sont pas de véritables types, mais ils sont utilisés dans les déclarations de fonctions :
CREATE FUNCTION multiply_any(anyelement, anyelement)
RETURNS anyelement AS $$
SELECT $1 * $2;
$$ LANGUAGE SQL;
SELECT multiply_any(5, 3); -- Retourne 15
SELECT multiply_any(5.5, 2); -- Retourne 11.0
Les pseudo-types comme anyelement
permettent des définitions de fonctions plus flexibles.
Et voilà, mes étudiants prompts ! Nous avons exploré le vaste paysage des types de données PostgreSQL. Souvenez-vous, choisir le bon type de données est crucial pour les performances, l'efficacité du stockage et l'intégrité des données. C'est comme choisir le bon outil pour le bon travail - vous n'utiliseriez pas un marteau pour accrocher une photo, n'est-ce pas ?
Alors, continuez votre voyage PostgreSQL, et vous découvrirez encore plus de nuances et d'astuces avec ces types de données. Continuez à expérimenter, restez curieux, et surtout, amusez-vous avec vos bases de données ! Qui sait, vous pourriez bien devenir le prochain mage des bases de données en ville. ?♂️?
Maintenant, allaitez et créez des bases de données incroyables ! Et souvenez-vous, dans le monde de PostgreSQL, chaque type de données a sa place - tout comme chaque livre trouve sa place sur une étagère de bibliothèque. Bon codage ! ??
Credits: Image by storyset