Aller au contenu principal

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​

AspectH2PostgreSQL
TypeEn mémoire/fichier localServeur dédié
UsageDéveloppement/TestsProduction
PerformanceLimitéeHaute performance
Utilisateurs simultanésNon adaptéExcellent
OutilsConsole basiquepgAdmin, DBeaver, etc.
ScalabilitéFaibleExcellente
BackupManuel/complexeNatif et automatisé
SécuritéBasiqueAvancé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

  1. Exécutez l'installateur
  2. Suivez l'assistant d'installation
  3. IMPORTANT: Notez le mot de passe de l'utilisateur postgres (vous en aurez besoin!)
  4. Port par défaut: 5432 (laissez-le tel quel)
  5. 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
urlAdresse de la base (localhost:5432/nom_base)
usernameUtilisateur PostgreSQL (par défaut: postgres)
passwordMot de passe défini à l'installation
driver-class-nameDriver JDBC pour PostgreSQL
ddl-auto: updateHibernate met à jour le schéma automatiquement
show-sql: trueAffiche les requêtes SQL dans la console
dialectDialecte SQL spécifique à PostgreSQL
format_sql: trueFormate 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:

  1. Ouvrez pgAdmin
  2. Créez une nouvelle connexion serveur
  3. Nom: Local PostgreSQL
  4. Host: localhost
  5. Port: 5432
  6. Username: postgres
  7. 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.

➡️ Chapitre 2: Jakarta vs Javax

⬅️ Retour au Module 4