Parfait !
Voici un **cours complet sur PostgreSQL**, clair et progressif, adapté
aux débutants comme aux développeurs plus avancés.
---
## 🐘 COURS COMPLET SUR **PostgreSQL**
### ✅ Partie 1 : Introduction à PostgreSQL
* **PostgreSQL** est un **système de gestion de base de données relationnelle
(SGBDR)** open source, robuste et puissant.
* Il respecte les normes SQL, supporte les **transactions ACID**, les **types
complexes**, les **fonctions personnalisées**, et **JSONB**.
---
### 💻 Partie 2 : Installation de PostgreSQL
#### ✅ Sous Windows :
1. Télécharger depuis :
[[Link]
download/windows/)
2. Installer **pgAdmin** (interface graphique officielle)
3. Créer un super-utilisateur (souvent nommé `postgres`)
4. Port par défaut : `5432`
#### ✅ Sous Linux :
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
```
---
### Partie 3 : Concepts de Base
| Élément | Description |
| ------------------- | ----------------------------------------- |
| **Base de données** | Contient les données |
| **Table** | Structure les données (colonnes/colonnes) |
| **Schéma** | Groupe logique de tables/fonctions |
| **Ligne** | Une entrée dans une table |
| **Colonne** | Une propriété d'une ligne |
| **Index** | Accélère les recherches |
---
### 📦 Partie 4 : Commandes SQL de base
#### 🔹 Connexion à PostgreSQL :
```bash
psql -U postgres -d nom_bdd
```
#### 🔹 Créer une base :
```sql
CREATE DATABASE mon_projet;
```
#### 🔹 Créer une table :
```sql
CREATE TABLE utilisateurs (
id SERIAL PRIMARY KEY,
nom VARCHAR(100),
email VARCHAR(255) UNIQUE NOT NULL,
age INTEGER
);
```
#### 🔹 Insérer des données :
```sql
INSERT INTO utilisateurs (nom, email, age)
VALUES ('Parfait', 'parfait@[Link]', 25);
```
#### 🔹 Lire les données :
```sql
SELECT * FROM utilisateurs;
```
#### 🔹 Mettre à jour :
```sql
UPDATE utilisateurs SET age = 26 WHERE nom = 'Parfait';
```
#### 🔹 Supprimer :
```sql
DELETE FROM utilisateurs WHERE age < 18;
```
---
### 🧠 Partie 5 : Types de Données
| Type | Description |
| ------------------- | -------------------- |
| `INTEGER` | Entier |
| `SERIAL` | Clé auto-incrémentée |
| `VARCHAR(n)` | Chaîne de caractères |
| `TEXT` | Texte long |
| `BOOLEAN` | Vrai/faux |
| `DATE`, `TIMESTAMP` | Date et heure |
| `JSON`, `JSONB` | Données JSON |
---
### 🔐 Partie 6 : Utilisateurs et Permissions
#### 🔹 Créer un utilisateur :
```sql
CREATE USER devuser WITH PASSWORD 'motdepasse';
```
#### 🔹 Donner les droits :
```sql
GRANT ALL PRIVILEGES ON DATABASE mon_projet TO devuser;
```
---
### 🔄 Partie 7 : Relations, Clés, Index
#### 🔹 Clé étrangère :
```sql
CREATE TABLE commandes (
id SERIAL PRIMARY KEY,
utilisateur_id INTEGER REFERENCES utilisateurs(id),
montant DECIMAL(10,2)
);
```
#### 🔹 Index :
```sql
CREATE INDEX idx_utilisateur_email ON utilisateurs(email);
```
---
### 🧰 Partie 8 : pgAdmin (interface graphique)
* Créer/supprimer des bases
* Éditer des tables, voir les requêtes SQL
* Sauvegarder/restaurer des bases
---
### 📚 Partie 9 : Requêtes Avancées
* **Jointures :**
```sql
SELECT [Link], [Link]
FROM utilisateurs u
JOIN commandes c ON [Link] = c.utilisateur_id;
```
* **Fonctions d’agrégation :**
```sql
SELECT COUNT(*), AVG(age) FROM utilisateurs;
```
* **GROUP BY, HAVING :**
```sql
SELECT age, COUNT(*) FROM utilisateurs GROUP BY age HAVING COUNT(*) > 1;
```
* **Sous-requêtes :**
```sql
SELECT * FROM utilisateurs WHERE age > (SELECT AVG(age) FROM utilisateurs);
```
---
### 🔄 Partie 10 : Backup et Restauration
#### 🔹 Sauvegarde :
```bash
pg_dump -U postgres -d mon_projet -f [Link]
```
#### 🔹 Restauration :
```bash
psql -U postgres -d mon_projet < [Link]
```
---
### 🚀 Partie 11 : PostgreSQL avec Laravel
Dans `.env` de Laravel :
```env
DB_CONNECTION=pgsql
DB_HOST=[Link]
DB_PORT=5432
DB_DATABASE=nom_de_la_base
DB_USERNAME=postgres
DB_PASSWORD=motdepasse
```
Migration compatible :
```php
$table->bigIncrements('id');
$table->string('nom');
$table->timestamps();
```
---
Souhaites-tu maintenant que je passe à **Symfony** ou veux-tu approfondir Laravel
ou PostgreSQL avant ?