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 !

PostgreSQL - Data Types

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 utilise serial, qui s'incrémente automatiquement pour chaque nouvelle entrée.
  • publication_year utilise smallint car les livres ne sont pas si anciens (désolé, anciens manuscrits !).
  • pages utilise integer pour la longueur des livres.
  • isbn utilise bigint 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