Chapitre 1: PostgreSQL - Installation et Configuration
Introduction
PostgreSQL est un système de gestion de base de données relationnelle (SGBDR) open-source, puissant et fiable, utilisé en production dans le monde entier par des entreprises comme Apple, Spotify, Instagram et Reddit.
Pourquoi PostgreSQL?
Jusqu'à présent, nous avons utilisé H2, une base de données parfaite pour le développement et les tests. Mais pour déployer une application en production, nous avons besoin d'une base de données robuste, performante et scalable: PostgreSQL.
H2 vs PostgreSQL: Comprendre la Différence
Tableau Comparatif
| Aspect | H2 | PostgreSQL |
|---|---|---|
| Type | En mémoire/fichier local | Serveur dédié |
| Usage | Développement/Tests | Production |
| Performance | Limitée | Haute performance |
| Utilisateurs simultanés | Non adapté | Excellent |
| Outils | Console basique | pgAdmin, DBeaver, etc. |
| Scalabilité | Faible | Excellente |
| Backup | Manuel/complexe | Natif et automatisé |
| Sécurité | Basique | Avancée (rôles, permissions) |
Analogie
H2 = Vélo 🚲
- Parfait pour apprendre et tester
- Facile à démarrer
- Pas adapté pour transporter 100 personnes
PostgreSQL = Autobus 🚌
- Conçu pour le transport de masse
- Fiable et robuste
- Nécessite un permis spécial (configuration)
Installation de PostgreSQL
Windows
Étape 1: Téléchargement
Rendez-vous sur: postgresql.org/download/windows
Téléchargez PostgreSQL 14+ (ou version plus récente).
Étape 2: Installation
- Exécutez l'installateur
- Suivez l'assistant d'installation
- IMPORTANT: Notez le mot de passe de l'utilisateur
postgres(vous en aurez besoin!) - Port par défaut: 5432 (laissez-le tel quel)
- Installez Stack Builder (optionnel mais recommandé)
Étape 3: Vérification
Ouvrez un terminal et tapez:
psql --version
Vous devriez voir:
psql (PostgreSQL) 14.x
macOS
Via Homebrew:
brew install postgresql@14
brew services start postgresql@14
Vérification:
psql --version
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql
Premiers Pas avec PostgreSQL
Se Connecter à PostgreSQL
Windows (via psql):
psql -U postgres
Entrez le mot de passe que vous avez défini lors de l'installation.
macOS/Linux:
sudo -u postgres psql
Commandes SQL de Base
1. Lister les Bases de Données
\l
Vous verrez les bases par défaut:
postgres
template0
template1
2. Créer une Base de Données
CREATE DATABASE greeting_db;
Résultat:
CREATE DATABASE
3. Se Connecter à une Base
\c greeting_db
Résultat:
You are now connected to database "greeting_db" as user "postgres".
4. Lister les Tables
\dt
Au début, il n'y aura aucune table.
5. Voir la Structure d'une Table
\d nom_table
6. Quitter psql
\q
Configuration Spring Boot pour PostgreSQL
Étape 1: Ajouter la Dépendance Maven
Fichier: pom.xml
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
Note: Le <scope>runtime</scope> indique que cette dépendance n'est nécessaire qu'à l'exécution, pas à la compilation.
Étape 2: Créer la Base de Données
Avant de configurer Spring Boot, créez la base de données:
psql -U postgres
CREATE DATABASE greeting_db;
\q
Étape 3: Configuration application.yml
Fichier: src/main/resources/application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/greeting_db
username: postgres
password: votre_mot_de_passe
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
Explications:
| Propriété | Signification |
|---|---|
url | Adresse de la base (localhost:5432/nom_base) |
username | Utilisateur PostgreSQL (par défaut: postgres) |
password | Mot de passe défini à l'installation |
driver-class-name | Driver JDBC pour PostgreSQL |
ddl-auto: update | Hibernate met à jour le schéma automatiquement |
show-sql: true | Affiche les requêtes SQL dans la console |
dialect | Dialecte SQL spécifique à PostgreSQL |
format_sql: true | Formate les requêtes SQL pour la lisibilité |
Tester la Connexion
Créer une Entité Simple
Fichier: model/Product.java
package com.example.demo.model;
import jakarta.persistence.*;
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Double price;
// Constructeurs
public Product() {}
public Product(String name, Double price) {
this.name = name;
this.price = price;
}
// Getters et Setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Double getPrice() { return price; }
public void setPrice(Double price) { this.price = price; }
}
Démarrer l'Application
mvn clean install -DskipTests spring-boot:run
Console:
Hibernate:
create table products (
id bigserial not null,
name varchar(255),
price float8,
primary key (id)
)
✅ PostgreSQL crée automatiquement la table!
Vérifier dans PostgreSQL
psql -U postgres -d greeting_db
\dt
Résultat:
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | products | table | postgres
\d products
Résultat:
Table "public.products"
Column | Type | Collation | Nullable | Default
--------+------------------------+-----------+----------+--------------------------------------
id | bigint | | not null | nextval('products_id_seq'::regclass)
name | character varying(255) | | |
price | double precision | | |
✅ La table existe dans PostgreSQL!
Outils d'Administration
pgAdmin
Installation:
Téléchargez depuis: pgadmin.org
Utilisation:
- Ouvrez pgAdmin
- Créez une nouvelle connexion serveur
- Nom:
Local PostgreSQL - Host:
localhost - Port:
5432 - Username:
postgres - Password: Votre mot de passe
Fonctionnalités:
- Interface graphique intuitive
- Explorateur de bases de données
- Éditeur SQL
- Visualisation des données
- Gestion des utilisateurs et permissions
DBeaver
Installation:
Téléchargez depuis: dbeaver.io
Avantages:
- Gratuit et open-source
- Support de multiples bases de données (PostgreSQL, MySQL, Oracle, etc.)
- Interface moderne
- Auto-complétion SQL
- Visualisation de données
Sécurité et Meilleures Pratiques
1. Ne Jamais Hardcoder les Mots de Passe
❌ MAUVAIS:
spring:
datasource:
password: monMotDePasse123
✅ BON:
spring:
datasource:
password: ${DB_PASSWORD}
Variable d'environnement (Windows):
$env:DB_PASSWORD = "monMotDePasse123"
mvn spring-boot:run
Variable d'environnement (Linux/macOS):
export DB_PASSWORD="monMotDePasse123"
mvn spring-boot:run
2. Créer un Utilisateur Dédié (Production)
Ne pas utiliser postgres en production!
-- Créer un utilisateur
CREATE USER myapp_user WITH PASSWORD 'secure_password';
-- Créer une base
CREATE DATABASE myapp_db OWNER myapp_user;
-- Donner les permissions
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
Configuration Spring Boot:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/myapp_db
username: myapp_user
password: ${DB_PASSWORD}
3. Limiter les Permissions
-- Donner uniquement les permissions nécessaires
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myapp_user;
Résumé
Ce que Vous Avez Appris
✅ Installer PostgreSQL sur Windows/Mac/Linux
✅ Créer des bases de données et utilisateurs
✅ Configurer Spring Boot pour PostgreSQL
✅ Utiliser pgAdmin et DBeaver
✅ Sécuriser les connexions avec des variables d'environnement
✅ Comprendre les différences entre H2 et PostgreSQL
Points Clés
PostgreSQL = Production-Ready
- Robuste et fiable
- Performant avec de nombreux utilisateurs
- Outils d'administration professionnels
- Sécurité avancée
Configuration Spring Boot = Simple
- 1 dépendance Maven
- 1 fichier
application.yml - Hibernate gère le schéma automatiquement
Prochaine Étape
Maintenant que PostgreSQL est configuré, passons au Chapitre 2 pour comprendre Jakarta vs Javax Persistence.