🔝 Retour au Sommaire
Ce parcours est conçu pour guider les professionnels DevOps et SRE (Site Reliability Engineer) dans leur apprentissage de PostgreSQL. L'accent est mis sur le déploiement, l'automatisation, le monitoring, la haute disponibilité et la gestion en production plutôt que sur le développement SQL.
Note importante : Les durées indiquées sont des estimations basées sur un apprentissage régulier. Votre progression peut varier selon votre expérience préalable en administration système, votre familiarité avec les bases de données et l'intensité de votre pratique.
Prérequis : Ce parcours suppose une connaissance de base de Linux/Unix, des concepts réseau, et idéalement une familiarité avec les outils d'automatisation (Ansible, Terraform) et les conteneurs (Docker).
Acquérir les compétences essentielles pour installer, configurer et gérer une instance PostgreSQL. À la fin de cette phase, vous serez capable de déployer PostgreSQL, comprendre son architecture interne et effectuer les opérations de maintenance de base.
Comprendre l'architecture PostgreSQL :
Avant de déployer PostgreSQL, il est essentiel de comprendre comment il fonctionne en interne.
-
Modèle client-serveur : PostgreSQL fonctionne avec un processus principal (postmaster) qui gère les connexions entrantes et spawne des processus backend pour chaque connexion client.
-
Processus d'arrière-plan essentiels :
postmaster: processus principal, gère les connexionsbackground writer: écrit les pages modifiées sur disquecheckpointer: crée des points de contrôle régulierswalwriter: écrit les journaux de transactions (WAL)autovacuum launcher: coordonne le nettoyage automatiquestats collector: collecte les statistiques d'utilisation
-
Gestion de la mémoire :
shared_buffers: cache partagé entre tous les processuswork_mem: mémoire par opération (tri, jointure)maintenance_work_mem: mémoire pour les opérations de maintenanceeffective_cache_size: estimation du cache système disponible
-
Structure physique des données :
- Répertoire de données (
PGDATA) : contient toutes les données - Fichiers de configuration :
postgresql.conf,pg_hba.conf,pg_ident.conf - WAL (Write-Ahead Log) : journaux de transactions pour la durabilité
- Tablespaces : emplacements alternatifs pour les données
- Répertoire de données (
Installation de PostgreSQL :
-
Installation depuis les paquets officiels (méthode recommandée) :
- Dépôt PGDG (PostgreSQL Global Development Group) pour les versions récentes
- Différences entre distributions : Debian/Ubuntu, RHEL/CentOS/Rocky, etc.
- Comprendre ce qui est installé : binaires, bibliothèques, scripts
-
Structure du système de fichiers après installation :
/usr/lib/postgresql/<version>/: binaires/etc/postgresql/<version>/<cluster>/: configuration (Debian)/var/lib/postgresql/<version>/<cluster>/: données (Debian)- Variations selon les distributions
-
Initialisation d'un cluster :
- Commande
initdb: création du répertoire de données - Options importantes :
--encoding,--locale,--data-checksums - Nouveauté PostgreSQL 18 : checksums activés par défaut
- Commande
-
Gestion du service :
systemctl: start, stop, restart, reload, statuspg_ctl: outil natif PostgreSQL pour le contrôle- Différence entre
restartetreload(paramètres nécessitant un redémarrage)
Fichiers de configuration essentiels :
-
postgresql.conf — Configuration principale :
Paramètres de connexion :
listen_addresses: interfaces réseau écoutées ('*' pour toutes)port: port d'écoute (défaut : 5432)max_connections: nombre maximum de connexions simultanées
Paramètres mémoire (règles de base pour commencer) :
shared_buffers: 25% de la RAM système (maximum ~8GB pour commencer)effective_cache_size: 50-75% de la RAM systèmework_mem: 32-64MB (attention, multiplié par le nombre d'opérations)maintenance_work_mem: 256MB-1GB selon la RAM disponible
Paramètres WAL :
wal_level:replicapour la réplication,logicalpour la réplication logiquemax_wal_size: taille maximale des WAL avant checkpointcheckpoint_timeout: intervalle entre checkpoints
-
pg_hba.conf — Contrôle d'accès :
Ce fichier définit qui peut se connecter, depuis où, et comment.
Format d'une ligne :
TYPE DATABASE USER ADDRESS METHODTypes de connexion :
local: connexions via socket Unixhost: connexions TCP/IP (SSL ou non)hostssl: connexions TCP/IP avec SSL obligatoirehostnossl: connexions TCP/IP sans SSL
Méthodes d'authentification :
trust: aucune authentification (JAMAIS en production)peer: authentification via le système (utilisateur Unix = utilisateur PostgreSQL)md5: mot de passe hashé MD5 (déprécié)scram-sha-256: méthode recommandée pour les mots de passecert: authentification par certificat SSLldap: authentification via annuaire LDAP- Nouveauté PostgreSQL 18 :
oauthpour OAuth 2.0
-
pg_ident.conf — Mapping d'utilisateurs :
- Associer des utilisateurs système à des utilisateurs PostgreSQL
- Utile avec l'authentification
peeroucert
Sécurité de base :
- Principe du moindre privilège : chaque application/utilisateur n'a accès qu'à ce dont il a besoin
- Créer des rôles dédiés par application (ne jamais utiliser
postgrespour les applications) - Activer SSL/TLS pour les connexions réseau
- Restreindre
listen_addressesaux interfaces nécessaires - Configurer le pare-feu système (iptables, firewalld, ufw)
Introduction à psql pour les opérations :
- Connexion :
psql -h host -p port -U user -d database - Commandes méta essentielles :
\l: lister les bases de données\du: lister les rôles\dt: lister les tables\conninfo: informations de connexion\x: affichage étendu (pratique pour les vues système)
Comprendre VACUUM :
VACUUM est l'opération de maintenance la plus importante de PostgreSQL. Elle est nécessaire à cause du fonctionnement de MVCC (Multiversion Concurrency Control).
-
Pourquoi VACUUM est nécessaire :
- PostgreSQL ne supprime pas immédiatement les lignes lors d'un
UPDATEouDELETE - Les anciennes versions restent pour les transactions en cours
- VACUUM récupère cet espace pour une réutilisation future
- Sans VACUUM, la base grossit indéfiniment ("bloat")
- PostgreSQL ne supprime pas immédiatement les lignes lors d'un
-
Types de VACUUM :
VACUUM: marque l'espace comme réutilisable, ne bloque pas les lectures/écrituresVACUUM FULL: réécrit entièrement la table, récupère l'espace disque, mais verrouille la tableVACUUM ANALYZE: combine VACUUM et mise à jour des statistiques
-
Autovacuum :
- Processus automatique qui lance VACUUM et ANALYZE selon les besoins
- Paramètres clés :
autovacuum_vacuum_threshold,autovacuum_vacuum_scale_factor - Supervision : vérifier que l'autovacuum fonctionne correctement
- Nouveauté PostgreSQL 18 :
autovacuum_vacuum_max_thresholdpour les grandes tables
Comprendre ANALYZE :
- Met à jour les statistiques utilisées par le planificateur de requêtes
- Sans statistiques à jour, PostgreSQL peut choisir des plans d'exécution inefficaces
- Exécuté automatiquement par autovacuum, mais peut être lancé manuellement après des imports massifs
Sauvegardes logiques avec pg_dump :
-
pg_dump : sauvegarde une base de données
# Format plain SQL (lisible, restaurable avec psql) pg_dump -h host -U user dbname > backup.sql # Format custom (compressé, restauration flexible) pg_dump -h host -U user -Fc dbname > backup.dump # Format directory (parallélisable) pg_dump -h host -U user -Fd -j 4 dbname -f backup_dir/
-
Options importantes :
-Fc: format custom (recommandé)-j N: parallélisation (format directory uniquement)--schema-only: structure uniquement--data-only: données uniquement-t table: table spécifique-n schema: schéma spécifique
-
pg_dumpall : sauvegarde de l'instance complète
- Inclut les rôles et les tablespaces
- Nécessaire pour une restauration complète
pg_dumpall -h host -U postgres > full_backup.sql
Restauration :
-
Depuis un dump SQL plain :
psql -h host -U user -d dbname < backup.sql -
Depuis un dump format custom :
pg_restore -h host -U user -d dbname backup.dump
-
Options utiles de pg_restore :
-j N: restauration parallèle-c: drop des objets avant création--if-exists: évite les erreurs si objets absents-t table: restaurer une table spécifique
Planification des sauvegardes :
- Utiliser cron ou systemd timers pour automatiser
- Rotation des sauvegardes (conserver N jours/semaines)
- Tester régulièrement les restaurations
À la fin de cette phase, vous devriez être capable de :
- Installer PostgreSQL depuis les dépôts officiels sur les principales distributions Linux
- Configurer les paramètres essentiels de
postgresql.confetpg_hba.conf - Sécuriser l'accès à une instance PostgreSQL (SSL, authentification, pare-feu)
- Comprendre le rôle de VACUUM et d'autovacuum
- Effectuer des sauvegardes logiques avec pg_dump et les restaurer
- Utiliser psql pour les opérations d'administration courantes
- Documentation officielle PostgreSQL : chapitres "Server Setup and Operation" et "Backup and Restore"
- Wiki PostgreSQL : articles sur la configuration et le tuning
- PGTune (pgtune.leopard.in.ua) : génération de configuration de base
Maîtriser les opérations avancées de maintenance, mettre en place un monitoring efficace, automatiser les déploiements et comprendre les bases de la réplication. Vous serez capable de gérer PostgreSQL de manière professionnelle avec des outils modernes.
Vues système essentielles :
PostgreSQL expose de nombreuses informations via des vues système. Les maîtriser est essentiel pour tout DevOps/SRE.
-
pg_stat_activity — Activité en temps réel :
SELECT pid, usename, application_name, client_addr, state, query_start, query FROM pg_stat_activity WHERE state != 'idle';
state: idle, active, idle in transaction, etc.wait_event_typeetwait_event: ce sur quoi le processus attendquery: requête en cours (attention aux informations sensibles)
-
pg_stat_database — Statistiques par base :
numbackends: connexions activesxact_commit,xact_rollback: transactionsblks_read,blks_hit: accès disque vs cachetup_returned,tup_fetched,tup_inserted,tup_updated,tup_deleted: activité
-
pg_stat_user_tables — Statistiques par table :
seq_scan,idx_scan: scans séquentiels vs indexn_tup_ins,n_tup_upd,n_tup_del: modificationsn_live_tup,n_dead_tup: tuples vivants vs morts (bloat)last_vacuum,last_autovacuum,last_analyze: dernières maintenances
-
pg_stat_user_indexes — Utilisation des index :
idx_scan: nombre de fois que l'index a été utilisé- Index avec 0 scans = candidats à la suppression
-
pg_locks — Verrous actifs :
SELECT l.pid, l.locktype, l.mode, l.granted, a.usename, a.query FROM pg_locks l JOIN pg_stat_activity a ON l.pid = a.pid;
Extension pg_stat_statements :
Cette extension est indispensable pour identifier les requêtes problématiques.
-
Installation :
CREATE EXTENSION pg_stat_statements;
-
Configuration dans
postgresql.conf:shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all -
Requêtes utiles :
-- Top 10 requêtes par temps total SELECT query, calls, total_exec_time, mean_exec_time, rows, shared_blks_hit, shared_blks_read FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
Métriques vitales à surveiller :
-
Cache hit ratio (objectif > 99%) :
SELECT sum(blks_hit) * 100.0 / sum(blks_hit + blks_read) as cache_hit_ratio FROM pg_stat_database;
-
Connexions :
- Connexions actives vs
max_connections - Connexions en état "idle in transaction" (problématiques)
- Connexions actives vs
-
Bloat (espace perdu) :
- Ratio
n_dead_tup / n_live_tupdans pg_stat_user_tables - Outils :
pgstattuple, requêtes d'estimation du bloat
- Ratio
-
Réplication lag (si applicable) :
SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn FROM pg_stat_replication;
-
Transaction ID age (risque de wraparound) :
SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age DESC;
Stack de monitoring :
-
Prometheus + postgres_exporter :
postgres_exporterexpose les métriques au format Prometheus- Configuration : connexion à PostgreSQL, métriques à collecter
- Alertes sur les métriques critiques
-
Grafana :
- Dashboards pour visualiser les métriques
- Dashboards communautaires disponibles (ex: Percona PMM)
-
pgBadger :
- Analyse des logs PostgreSQL
- Génère des rapports HTML détaillés
- Identification des requêtes lentes, erreurs, connexions
-
Logging PostgreSQL :
log_statement: none, ddl, mod, alllog_min_duration_statement: logger les requêtes lenteslog_line_prefix: format des lignes de log (inclure timestamp, pid, user, db)
Sauvegardes physiques avec pg_basebackup :
Contrairement à pg_dump (logique), pg_basebackup copie les fichiers physiques de la base.
-
Avantages :
- Plus rapide pour les grandes bases
- Permet le Point-In-Time Recovery (PITR)
- Base pour la réplication
-
Utilisation de base :
pg_basebackup -h host -U replication_user \ -D /path/to/backup -Ft -z -P
-Ft: format tar-z: compression gzip-P: affichage de la progression-X stream: inclure les WAL nécessaires
Point-In-Time Recovery (PITR) :
PITR permet de restaurer la base à n'importe quel instant dans le passé.
-
Principe :
- Restaurer une sauvegarde de base (pg_basebackup)
- Rejouer les WAL archivés jusqu'au point souhaité
-
Configuration de l'archivage WAL :
# postgresql.conf archive_mode = on archive_command = 'cp %p /path/to/archive/%f' -
Restauration PITR :
- Arrêter PostgreSQL
- Restaurer la sauvegarde de base
- Configurer
recovery.signalet les paramètres de recovery - Démarrer PostgreSQL
-
Paramètres de recovery :
# postgresql.conf (pour la restauration) restore_command = 'cp /path/to/archive/%f %p' recovery_target_time = '2025-11-15 14:30:00' recovery_target_action = 'promote'
Outils de sauvegarde avancés :
-
pgBackRest :
- Sauvegardes complètes, différentielles, incrémentales
- Compression, chiffrement
- Parallélisation
- Gestion automatique de la rétention
- Vérification d'intégrité
-
Barman :
- Développé par 2ndQuadrant/EDB
- Gestion centralisée des sauvegardes
- Catalogage des sauvegardes
- Recovery simplifié
Stratégie de sauvegarde 3-2-1 :
- 3 copies des données
- 2 supports de stockage différents
- 1 copie hors site (autre datacenter, cloud)
Ansible pour PostgreSQL :
-
Rôles Ansible communautaires :
geerlingguy.postgresql: installation de baseANXS.postgresql: configuration avancée- Rôles Patroni pour la HA
-
Tâches typiques à automatiser :
- Installation et configuration initiale
- Création de bases et utilisateurs
- Déploiement de configuration
- Mise à jour des versions mineures
-
Exemple de playbook simplifié :
- name: Configure PostgreSQL hosts: postgres_servers roles: - role: postgresql postgresql_version: 18 postgresql_listen_addresses: "*" postgresql_max_connections: 200
Terraform pour le provisioning :
-
Provisioning d'instances PostgreSQL managées :
- AWS RDS PostgreSQL
- Azure Database for PostgreSQL
- Google Cloud SQL
-
Provisioning d'infrastructure pour PostgreSQL self-hosted :
- VMs, réseaux, stockage
- Load balancers pour la HA
Docker et PostgreSQL :
-
Image officielle :
postgres:18 -
Configuration via variables d'environnement :
POSTGRES_PASSWORD: mot de passe du superuserPOSTGRES_USER: utilisateur par défautPOSTGRES_DB: base de données par défaut
-
Volumes pour la persistance :
/var/lib/postgresql/data: données- Configuration personnalisée via fichiers montés
-
Considérations pour la production :
- Stockage persistant approprié (pas de stockage éphémère)
- Configuration mémoire adaptée au conteneur
- Health checks
-
Docker Compose pour le développement :
services: postgres: image: postgres:18 environment: POSTGRES_PASSWORD: secret volumes: - pgdata:/var/lib/postgresql/data ports: - "5432:5432" volumes: pgdata:
Connection Pooling avec PgBouncer :
PostgreSQL crée un processus par connexion, ce qui limite le nombre de connexions simultanées. PgBouncer résout ce problème.
-
Modes de pooling :
session: une connexion PostgreSQL par session clienttransaction: partage des connexions entre transactions (recommandé)statement: partage maximal, mais limitations importantes
-
Configuration de base :
[databases] mydb = host=localhost port=5432 dbname=mydb [pgbouncer] listen_addr = * listen_port = 6432 auth_type = scram-sha-256 pool_mode = transaction max_client_conn = 1000 default_pool_size = 20
-
Dimensionnement :
default_pool_size: connexions PostgreSQL par base/utilisateurmax_client_conn: connexions clients maximum- Règle :
default_pool_size× nombre de pools <max_connectionsPostgreSQL
À la fin de cette phase, vous devriez être capable de :
- Mettre en place un monitoring complet avec Prometheus/Grafana
- Identifier les requêtes problématiques avec pg_stat_statements
- Configurer l'archivage WAL et effectuer des restaurations PITR
- Utiliser pgBackRest ou Barman pour des sauvegardes avancées
- Automatiser les déploiements PostgreSQL avec Ansible
- Déployer PostgreSQL dans des conteneurs Docker
- Configurer PgBouncer pour le connection pooling
- Documentation pgBackRest et Barman
- "PostgreSQL 14 Administration Cookbook"
- Blogs : Percona, 2ndQuadrant/EDB, Crunchy Data
- Ansible Galaxy : rôles PostgreSQL communautaires
Maîtriser les architectures haute disponibilité, la réplication, les migrations majeures et la gestion des incidents. Vous serez capable de concevoir et opérer des infrastructures PostgreSQL critiques et de répondre efficacement aux situations de crise.
Réplication physique (Streaming Replication) :
La réplication physique crée une copie exacte du primary sur un ou plusieurs standbys.
-
Concepts clés :
- Primary (anciennement master) : accepte les écritures
- Standby (anciennement slave) : réplique en lecture seule
- WAL : les modifications sont transmises via les journaux de transaction
-
Configuration du Primary :
# postgresql.conf wal_level = replica max_wal_senders = 10 max_replication_slots = 10# pg_hba.conf host replication replication_user standby_ip/32 scram-sha-256 -
Configuration du Standby :
- Créer avec pg_basebackup :
pg_basebackup -h primary -U replication_user -D /data -P -R
- Le flag
-Rcrée automatiquementstandby.signalet configure la connexion
- Créer avec pg_basebackup :
-
Synchrone vs Asynchrone :
- Asynchrone (défaut) : le primary n'attend pas la confirmation du standby
- Synchrone : le primary attend la confirmation avant de confirmer le commit
- Trade-off : durabilité vs performance
-
Slots de réplication :
- Garantissent que les WAL nécessaires sont conservés
- Attention : peuvent causer une accumulation de WAL si le standby est déconnecté
Réplication logique :
La réplication logique permet de répliquer des tables spécifiques et offre plus de flexibilité.
-
Cas d'usage :
- Réplication sélective (certaines tables seulement)
- Réplication entre versions PostgreSQL différentes
- Migrations avec temps d'arrêt minimal
-
Configuration :
# postgresql.conf sur le publisher wal_level = logical-- Sur le publisher CREATE PUBLICATION my_pub FOR TABLE table1, table2; -- Sur le subscriber CREATE SUBSCRIPTION my_sub CONNECTION 'host=publisher dbname=mydb' PUBLICATION my_pub;
Solutions de haute disponibilité :
-
Patroni :
- Solution de HA la plus populaire
- Utilise un système de consensus distribué (etcd, Consul, ZooKeeper)
- Gestion automatique du failover
- API REST pour le management
Architecture typique :
[etcd cluster] ←→ [Patroni + PostgreSQL] × 3 nodes ↓ [HAProxy/PgBouncer] ↓ [Applications] -
Repmgr :
- Plus simple que Patroni
- Bon pour les environnements moins critiques
- Failover automatique ou manuel
-
PgPool-II :
- Connection pooling + load balancing + failover
- Alternative tout-en-un, mais plus complexe
Failover et Promotion :
-
Promotion manuelle :
pg_ctl promote -D /data # ou SELECT pg_promote();
-
Avec Patroni :
patronictl switchover patronictl failover
-
Considérations post-failover :
- Mettre à jour les chaînes de connexion ou utiliser un VIP/DNS
- Reconfigurer l'ancien primary comme standby
- Vérifier l'intégrité des données
Kubernetes et PostgreSQL :
-
StatefulSets :
- Identité stable pour chaque pod
- Stockage persistant avec PersistentVolumeClaims
- Ordre de déploiement/suppression garanti
-
Operators Kubernetes :
Les operators automatisent la gestion de PostgreSQL sur Kubernetes.
-
CloudNativePG (anciennement Cloud Native PostgreSQL) :
- Développé par EDB
- Natif Kubernetes, déclaratif
- Réplication, failover automatique, backups
-
Zalando Postgres Operator :
- Utilisé en production chez Zalando
- Intégration avec Patroni
- Gestion du connection pooling
-
Crunchy Postgres Operator (PGO) :
- Solution complète de Crunchy Data
- Monitoring intégré (pgMonitor)
- Backups avec pgBackRest
-
-
Considérations stockage :
- Utiliser des StorageClasses performantes (SSD)
- Attention aux IOPS et à la latence
- Ne jamais utiliser de stockage éphémère pour les données
PostgreSQL managé dans le cloud :
-
AWS RDS PostgreSQL :
- Versions PostgreSQL supportées
- Multi-AZ pour la haute disponibilité
- Read replicas pour le scaling en lecture
- Automated backups et PITR
- Performance Insights pour le monitoring
-
Amazon Aurora PostgreSQL :
- Architecture de stockage distribuée
- Failover plus rapide que RDS standard
- Aurora Serverless pour les charges variables
-
Azure Database for PostgreSQL :
- Options Flexible Server (recommandé) vs Single Server (legacy)
- Réplication en lecture
- Intégration avec Azure Monitor
-
Google Cloud SQL / AlloyDB :
- Cloud SQL : PostgreSQL managé classique
- AlloyDB : compatible PostgreSQL avec architecture distribuée
-
Trade-offs Managed vs Self-hosted :
Aspect Managed Self-hosted Maintenance Provider Votre équipe Personnalisation Limitée Totale Coût Prévisible, souvent plus élevé Variable, potentiellement moins cher Extensions Liste restreinte Toutes Contrôle Limité Total
Migrations de versions majeures :
-
pg_upgrade :
- Migration in-place rapide
- Modes :
--copy(copie les fichiers) ou--link(liens symboliques, plus rapide) - Nouveauté PostgreSQL 18 : option
--swappour upgrade encore plus rapide - Nouveauté PostgreSQL 18 : préservation des statistiques
- Nouveauté PostgreSQL 18 : vérifications parallèles avec
--jobs
Processus :
# 1. Arrêter l'ancien cluster # 2. Vérifier la compatibilité pg_upgrade --check -b /old/bin -B /new/bin -d /old/data -D /new/data # 3. Effectuer la migration pg_upgrade -b /old/bin -B /new/bin -d /old/data -D /new/data # 4. Démarrer le nouveau cluster # 5. Analyser les statistiques (ou utiliser les statistiques préservées en PG18)
-
Migration par réplication logique :
- Temps d'arrêt minimal
- Permet de tester avant le basculement
- Plus complexe à mettre en œuvre
-
Stratégie Blue/Green :
- Deux environnements identiques
- Basculement rapide via DNS ou load balancer
- Possibilité de rollback
Troubleshooting avancé :
-
Problèmes de verrous :
-- Identifier les sessions bloquantes SELECT pg_blocking_pids(pid), * FROM pg_stat_activity WHERE wait_event_type = 'Lock'; -- Terminer une session bloquante (avec précaution) SELECT pg_terminate_backend(pid);
-
Transaction ID Wraparound :
- PostgreSQL utilise des identifiants de transaction sur 32 bits
- À ~2 milliards de transactions, risque de wraparound
- VACUUM freeze prévient ce problème
- Alerter si
age(datfrozenxid)approche 1 milliard
-- Vérifier l'âge des transactions SELECT datname, age(datfrozenxid), 2147483647 - age(datfrozenxid) as remaining FROM pg_database ORDER BY age DESC;
-
Corruption de données :
- Vérifier les checksums :
pg_checksums --check -D /data - Nouveauté PostgreSQL 18 : checksums activés par défaut
- Outils :
pg_amcheckpour vérifier l'intégrité des index
- Vérifier les checksums :
-
Saturation des connexions :
- Identifier les connexions idle in transaction
- Configurer
idle_in_transaction_session_timeout - Utiliser PgBouncer pour le pooling
-
Requêtes lentes :
- Identifier avec pg_stat_statements
- Analyser avec EXPLAIN (ANALYZE, BUFFERS)
- Vérifier les index manquants
- Vérifier les statistiques (
ANALYZE)
Sécurité avancée :
-
Row-Level Security (RLS) :
- Contrôle d'accès au niveau des lignes
- Utile pour le multi-tenant
ALTER TABLE orders ENABLE ROW LEVEL SECURITY; CREATE POLICY tenant_isolation ON orders USING (tenant_id = current_setting('app.tenant_id')::int);
-
Audit avec pgAudit :
- Logging détaillé des opérations
- Conformité réglementaire (SOC2, HIPAA, etc.)
-
Chiffrement :
- En transit : SSL/TLS (obligatoire en production)
- Au repos : chiffrement du système de fichiers ou TDE (Transparent Data Encryption)
- Nouveauté PostgreSQL 18 : configuration TLS 1.3 avec
ssl_tls13_ciphers
-
Gestion des secrets :
- Ne jamais stocker les mots de passe en clair
- Utiliser des gestionnaires de secrets (Vault, AWS Secrets Manager, etc.)
- Rotation régulière des credentials
Documentation et Runbooks :
- Documenter l'architecture et les décisions
- Créer des runbooks pour les opérations courantes :
- Failover manuel
- Restauration de sauvegarde
- Ajout d'un standby
- Réponse aux alertes
- Maintenir un inventaire des instances
- Documenter les dépendances et les SLA
À la fin de cette phase, vous devriez être capable de :
- Concevoir et implémenter une architecture haute disponibilité avec Patroni
- Configurer la réplication physique et logique
- Déployer PostgreSQL sur Kubernetes avec un operator
- Gérer des instances PostgreSQL dans le cloud (RDS, Cloud SQL, etc.)
- Effectuer des migrations de versions majeures avec différentes stratégies
- Diagnostiquer et résoudre des problèmes complexes (locks, wraparound, corruption)
- Mettre en place une sécurité avancée (RLS, audit, chiffrement)
- Documenter et créer des runbooks pour les opérations
- Documentation Patroni, CloudNativePG, Zalando Operator
- "Mastering PostgreSQL" de Hans-Jürgen Schönig
- Conférences : PGConf, KubeCon (sessions PostgreSQL)
- Blogs : Percona, Crunchy Data, EDB, Cybertec
- Formation Kubernetes si pas encore maîtrisé
En tant que DevOps/SRE, votre priorité est la fiabilité du service. Cela signifie :
- Toujours avoir des sauvegardes testées et restaurables
- Ne jamais déployer une configuration non testée en production
- Préférer les approches éprouvées aux solutions innovantes mais risquées
L'automatisation est essentielle, mais vous devez comprendre ce que font vos scripts et outils. En cas d'incident, vous devrez peut-être intervenir manuellement.
Simulez régulièrement des pannes :
- Failover de la base de données
- Restauration de sauvegarde
- Perte d'un nœud du cluster
N'attendez pas qu'un utilisateur signale un problème. Mettez en place des alertes sur :
- Espace disque
- Connexions
- Lag de réplication
- Requêtes lentes
- Âge des transactions (wraparound)
La documentation est critique :
- Architecture et diagrammes
- Procédures de recovery
- Contacts et escalade
- Post-mortems des incidents
Travaillez avec les équipes de développement pour :
- Optimiser les requêtes problématiques
- Planifier les migrations de schéma
- Dimensionner correctement l'infrastructure
| Phase | Période | Focus Principal | Compétences Clés |
|---|---|---|---|
| 1. Fondations | 0-6 mois | Installation, configuration, maintenance de base | Architecture, pg_hba.conf, VACUUM, pg_dump |
| 2. Opérations avancées | 6-12 mois | Monitoring, sauvegardes avancées, automatisation | pg_stat_statements, PITR, pgBackRest, Ansible, Docker, PgBouncer |
| 3. HA et Expertise | 12-24 mois | Haute disponibilité, Kubernetes, cloud, troubleshooting | Patroni, réplication, operators K8s, pg_upgrade, sécurité avancée |
Bien que PostgreSQL n'ait pas de certification officielle comme Oracle ou Microsoft, plusieurs options existent :
- EnterpriseDB (EDB) : Certifications PostgreSQL Professional
- Percona : Certifications orientées performance et opérations
- Cloud providers : Certifications incluant des modules PostgreSQL (AWS, Azure, GCP)
Ces certifications peuvent valider vos compétences auprès des employeurs, mais l'expérience pratique reste le critère le plus important.
⏭️ Parcours DBA