PostgreSQL est un système de gestion de base de données relationnelle et objet open source, réputé pour sa robustesse, ses fonctionnalités avancées et sa conformité aux standards SQL.
🤔 Pourquoi PostgreSQL ?
PostgreSQL c’est pour quoi :
🏗️ Données avec des liens - Clients → Commandes → Produits
💰 Calculs précis - Argent, comptabilité (pas de bug d’arrondi)
🔒 Sécurité - Les données ne se perdent jamais
📊 Rapports complexes - Statistiques, tableaux de bord
À utiliser pour :
Site e-commerce (produits, commandes, clients)
Application de gestion (factures, stocks, employés)
Tout ce qui ressemble à Excel mais en plus gros
🚀 Installation
📌 Système 🧠 Commande 🐧 Ubuntu/Debian sudo apt install postgresql postgresql-contrib🎩 CentOS/RHEL sudo yum install postgresql-server postgresql-contrib🍎 macOS (Homebrew) brew install postgresql🐳 Docker docker run -d postgres:15🏢 Version officielle postgresql.org/download
⚙️ Configuration de base
📌 Action 🧠 Commande 🚀 Initialiser la base sudo postgresql-setup initdb (CentOS) ▶️ Démarrer le service sudo systemctl start postgresql🔄 Activer au démarrage sudo systemctl enable postgresql👤 Se connecter comme postgres sudo -u postgres psql🔐 Changer mot de passe postgres ALTER USER postgres PASSWORD 'motdepasse';🚪 Quitter psql \q
🗄️ Gestion des bases de données
📌 Action 🧠 Commande 📋 Lister les bases \l (dans psql) 🆕 Créer une base CREATE DATABASE monapp;🗑️ Supprimer une base DROP DATABASE monapp;🔗 Se connecter à une base \c monapp (dans psql) 📊 Taille d’une base \l+ (dans psql) 💾 Sauvegarder une base pg_dump monapp > backup.sql📥 Restaurer une base psql monapp < backup.sql
👥 Gestion des utilisateurs
📌 Action 🧠 Commande 📋 Lister les utilisateurs \du (dans psql) 👤 Créer un utilisateur CREATE USER jean WITH PASSWORD 'motdepasse';🔐 Changer mot de passe ALTER USER jean PASSWORD 'nouveau_mdp';👑 Donner droits admin ALTER USER jean WITH SUPERUSER;🚫 Retirer droits admin ALTER USER jean WITH NOSUPERUSER;🗑️ Supprimer un utilisateur DROP USER jean;
🔒 Gestion des droits
📌 Action 🧠 Commande 🔑 Donner tous droits sur BDD GRANT ALL PRIVILEGES ON DATABASE monapp TO jean;📖 Donner droits lecture seule GRANT SELECT ON ALL TABLES IN SCHEMA public TO jean;✏️ Donner droits lecture/écriture GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO jean;🚫 Retirer des droits REVOKE ALL PRIVILEGES ON DATABASE monapp FROM jean;📋 Voir les droits d’une table \dp nom_table (dans psql)
💾 Sauvegarde et restauration
📌 Action 🧠 Commande 💾 Sauvegarde complète pg_dump -U postgres monapp > backup.sql🗜️ Sauvegarde compressée pg_dump -U postgres -Fc monapp > backup.dump📥 Restauration SQL psql -U postgres monapp < backup.sql📦 Restauration dump pg_restore -U postgres -d monapp backup.dump🌐 Sauvegarde distante pg_dump -h serveur -U user base > backup.sql⏰ Sauvegarde avec timestamp pg_dump -Fc monapp > backup_$(date +%Y%m%d).dump🚢 Sauvegarde sur port custom pg_dump -p 5433 -U postgres -Fc monapp > backup.dump📦 Restauration avec log pg_restore -U postgres -d monapp --verbose backup.dump >> restore.log 2>&1
Astuce
Astuces restauration :
La base cible doit exister avant de lancer pg_restore. Si elle a été supprimée, recréez-la vide avec CREATE DATABASE.
Pour récupérer une table perdue, restaurez le backup dans une base temporaire (monapp_copy) puis copiez la table.
Utilisez 2>&1 avec la redirection >> pour capturer les erreurs en plus de la sortie standard.
L’option -p est utile lors d’une montée de version de PostgreSQL où l’ancien et le nouveau tournent sur des ports différents.
🔍 Monitoring et debug
📌 Action 🧠 Commande 📈 Voir les connexions actives SELECT * FROM pg_stat_activity;🐌 Requêtes lentes en cours SELECT query, state, query_start FROM pg_stat_activity WHERE state = 'active';💾 Taille des bases SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;📊 Taille des tables `SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname 🔧 Tuer une connexion SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'user';⚡ Vider le cache SELECT pg_reload_conf();
📝 Configuration pg_hba.conf
Fichier de configuration des accès réseau
Localisation
# Trouver le fichier
sudo -u postgres psql -c " SHOW hba_file; "
# Éditer (généralement)
sudo nano /var/lib/pgsql/data/pg_hba.conf # CentOS
sudo nano /etc/postgresql/15/main/pg_hba.conf # Ubuntu
Exemples de configuration
# L'utilisateur postgres peut se connecter localement sans mot de passe
local all postgres trust
# Seuls les PC du réseau 192.168.1.0 à 192.168.1.255 peuvent se connecter
# avec mot de passe (md5 = mot de passe chiffré)
host all all 192.168.1.0/24 md5
# Exemple concret : autoriser seulement le serveur web 192.168.1.10
host monapp webuser 192.168.1.10/32 md5
# DANGER : autorise tout le monde sur internet (à éviter !)
host all all 0.0.0.0/0 md5
# SSL obligatoire pour les connexions externes (plus sécurisé)
hostssl all all 0.0.0.0/0 md5
Redémarrer après modification :
sudo systemctl reload postgresql