PostgreSQL PaaS sur Azure ou AWS RDS face à PostgreSQL autogéré sur VM Linux
Un guide d’architecture, d’exploitation et de décision pour répondre en profondeur à la question : qu’est-ce que l’on gagne et qu’est-ce que l’on perd lorsque l’on confie PostgreSQL à Azure Database for PostgreSQL Flexible Server ou Amazon RDS for PostgreSQL, plutôt que de le gérer soi-même sur une VM ou un serveur Linux ?
La thèse du guide
Le PaaS ne remplace pas PostgreSQL ni le DBA. Il remplace surtout une partie de la plateforme d’exploitation : hôte, sauvegardes physiques, orchestration HA, patching et intégration cloud. Le travail restant devient moins système, mais plus orienté données, SQL, fiabilité, capacité, sécurité logique et coûts.
Le piège à éviter
Comparer une facture PaaS à une seule VM. Une comparaison honnête inclut standbys, DCS, backup, monitoring, réseau, astreinte, patching, temps humain et coût des incidents.
La grande question
Ce que le PaaS change réellement — et ce qu’il ne change pas.
SynthèseTrade-offArchitectureResponsabilité partagée
Qui fait quoi entre Azure/AWS et votre équipe.
RACIOpsGouvernanceCe qu’implique réellement une VM
Derrière “on installe PostgreSQL”, toute une plateforme existe.
LinuxPatroniBackupsAzure Database for PostgreSQL
Ce que Flexible Server fournit et comment le penser.
AzureFlexible ServerEntraAmazon RDS for PostgreSQL
Ce que RDS apporte, et ce qu’il ne faut pas confondre avec Aurora.
AWSRDS PostgreSQLIAMProvisioning et Infrastructure as Code
Le gain n’est pas le clic : c’est la reproductibilité.
TerraformBicepCloudFormationBackups, PITR et restauration
Le service sauvegarde ; vous devez prouver la récupération.
PITRRPORestoreHaute disponibilité et failover
HA managée, HA autogérée et comportement applicatif.
Multi-AZZone RedundantFailoverRead replicas et scaling lecture
Une replica n’est ni un backup ni une garantie de cohérence.
Read scalingLagReportingDisaster Recovery inter-région
Région perdue, données corrompues ou erreur humaine : scénarios distincts.
DRCross-regionRPO/RTORéseau, identité et chiffrement
Le PaaS fournit les briques ; la sécurité logique reste à construire.
Private networkingEntra/IAMKMSSUPERUSER, OS et filesystem
La perte de contrôle la plus visible — et parfois la plus mal comprise.
SUPERUSERRootPGDATAParamètres, extensions et tablespaces
Le cœur de l’étude de compatibilité.
ParametersExtensionsTablespacesScaling compute, mémoire et stockage
Simple ne signifie pas instantané ni réversible.
Scale upStorageAutoscalingPerformance et tuning PostgreSQL
Le PaaS ne rend pas une mauvaise requête rapide.
SQLAutovacuumIOPSConnexions, pooling et résilience client
Le plus petit détail qui fait tomber les plus grandes architectures.
PgBouncerRDS ProxyPoolingMonitoring, logs et observabilité
Voir le service, le moteur et le métier dans la même chronologie.
MetricsLogsSLOPatching et maintenance
Automatisé ne veut pas dire sans interruption ni sans validation.
Minor versionsWindowPatchingUpgrades majeurs PostgreSQL
Le fournisseur orchestre ; la compatibilité reste votre problème.
PG majorPrecheckRollbackRéplication avancée, CDC et intégrations
Ce qui reste possible, ce qui devient fragile.
Logical replicationCDCSlotsMigration vers Azure ou AWS
Découvrir les incompatibilités avant le week-end de bascule.
AssessmentCutoverRollbackDiagnostic et gestion d’incident
Comment travailler sans root ni accès direct à l’hôte.
TroubleshootingSupportRunbooksCoûts et FinOps
Comparer la facture cloud au coût complet, pas à une VM nue.
TCOFinOps€Gouvernance, conformité et audit
Le service aide à produire des preuves, mais ne garantit pas votre conformité.
PolicyAuditComplianceLe DBA dans un monde PaaS
Moins de système, davantage d’ingénierie de la donnée.
DBAPlatformDataMatrice de décision
Transformer les préférences en critères mesurables.
ScoringWorkloadsDecisionArchitectures de référence
Trois modèles concrets pour la production.
BlueprintAzureAWSChecklist d’évaluation
Le questionnaire avant toute décision ou migration.
ChecklistAssessmentGo/No-GoExpliquer la différence simplement
Réponses courtes, moyennes et expertes pour entretien ou comité.
EntretienExecutiveExpertCheat-sheet
Résumé opérationnel à conserver.
RésuméCommandsRed flagsRéférences officielles
Documentation à revalider selon région, version et date.
Microsoft LearnAWS DocsPostgreSQLAzure Database for PostgreSQL et Amazon RDS for PostgreSQL achètent surtout du temps d’exploitation, de la standardisation et de la résilience industrialisée. En échange, ils retirent au DBA l’accès au système, au filesystem, au vrai SUPERUSER et à une partie de la liberté de configuration. Une VM fait exactement l’inverse : liberté maximale, responsabilité maximale.
Ce que l’on gagne avec le PaaS
- Provisioning rapide et reproductible : moteur, stockage, réseau, sauvegardes et supervision sont assemblés par le service.
- Backups automatiques et PITR sans construire soi-même une chaîne base backup + archivage WAL + catalogue + rétention.
- Haute disponibilité intégrée : standby, réplication, détection de panne, promotion et remplacement du nœud sont orchestrés.
- Patching de l’infrastructure : OS, hyperviseur et composants du service relèvent du fournisseur.
- Intégration cloud native : réseau privé, identité, clés, métriques, alertes, API, IaC et gouvernance.
- Réduction du risque humain sur les tâches répétitives de plateforme.
Ce que l’on perd
- Aucun SSH/root, donc pas de tuning kernel, de strace, d’eBPF, de package OS ou d’agent arbitraire.
- Aucun accès direct à PGDATA, aux fichiers WAL, aux fichiers de configuration ou aux scripts internes du service.
- Pas de véritable SUPERUSER : le rôle suprême appartient au fournisseur.
- Catalogue d’extensions, paramètres et versions encadré par Azure ou AWS.
- Topologies avancées limitées : réplication physique exotique, build custom, tablespaces physiques, hooks OS, stockage multi-volume.
- Cadence de maintenance imposée dans un cadre configurable mais non souverain.
Le PaaS est généralement le meilleur choix lorsque la base est importante mais standard. La VM reste préférable lorsque le PostgreSQL lui-même est un composant d’infrastructure fortement personnalisé, lorsqu’un accès système est obligatoire, ou lorsque des exigences techniques précises sortent du contrat du service.
| Dimension | Azure / AWS PaaS | PostgreSQL sur VM / Linux | Question à poser |
|---|---|---|---|
| Temps de mise en service | Minutes à heures | Heures à jours selon industrialisation | Le délai de livraison est-il critique ? |
| Charge récurrente | Faible à moyenne | Moyenne à très forte | Qui assure les patchs, backups, HA et astreintes ? |
| Contrôle système | Faible | Total | Avez-vous un besoin prouvé de root/PGDATA/kernel ? |
| Standardisation | Très forte | Dépend de votre plateforme | Souhaitez-vous imposer une landing zone commune ? |
| Liberté PostgreSQL | Encadrée | Quasi totale | Utilisez-vous des extensions, builds ou paramètres rares ? |
| Réversibilité | Bonne au niveau SQL, plus complexe au niveau service | Bonne si formats standards | Disposez-vous d’un plan de sortie testé ? |
| Responsabilité des incidents | Partagée | Quasi entièrement interne | Votre équipe peut-elle diagnostiquer 24/7 ? |
| Optimisation extrême | Limitée par le service | Maximale | Le gain attendu justifie-t-il l’exploitation supplémentaire ? |
Données et SQL
- Modèle de données
- Index et plans
- SQL applicatif
- Verrous et transactions
- Vacuum et bloat
Capacité et coûts
- Sizing CPU/RAM
- Stockage et IOPS
- Croissance
- Replicas
- Réservations et FinOps
Résilience réelle
- RPO/RTO
- Tests PITR
- Tests failover
- Runbooks
- Validation applicative
Le fournisseur automatise la mécanique de plateforme. Il ne comprend ni votre modèle métier, ni vos requêtes critiques, ni vos contraintes de clôture comptable, ni le coût d’un verrou de 40 minutes. Le DBA disparaît seulement si l’on confond administration système et ingénierie de la donnée.
Acheter un PaaS puis supprimer toute expertise PostgreSQL crée un système facile à provisionner mais difficile à optimiser, à sécuriser logiquement et à restaurer correctement.
| Profil de besoin | Choix naturel | Pourquoi |
|---|---|---|
| Application métier standard, équipe réduite | PaaS | La valeur est dans l’application, pas dans la construction de la plateforme DB. |
| SaaS multi-tenant avec besoin d’élasticité et gouvernance | PaaS | Automatisation, APIs, métriques, déploiement homogène. |
| Extension non supportée ou module natif interne | VM | Le catalogue PaaS devient un blocage structurel. |
| Besoin de root, eBPF, filesystem ou build PostgreSQL custom | VM | Exigence incompatible avec le contrat managé classique. |
| Environnement réglementé mais standard | Souvent PaaS | Le PaaS apporte chiffrement, journalisation et gouvernance, à compléter par des contrôles clients. |
| Plateforme interne avec équipe SRE/DBA mature et forte automatisation | VM ou PaaS selon workload | La décision devient économique et fonctionnelle, pas seulement opérationnelle. |
| Très petites bases non critiques | PaaS burstable ou VM mutualisée | Comparer le coût complet, pas seulement la facture du service. |
| Activité | Azure / AWS | Client DBA / DevOps | Sur VM auto-gérée |
|---|---|---|---|
| Matériel, hyperviseur, remplacement hôte | Fournisseur | Supervision du service | Client / hébergeur |
| Système Linux hôte | Fournisseur | Aucun accès | Client |
| Installation PostgreSQL | Fournisseur | Choix version/SKU | Client |
| Patches OS | Fournisseur | Planification et validation applicative | Client |
| Patches mineurs PostgreSQL | Fournisseur dans le cadre du service | Tests, maintenance, compatibilité | Client |
| Upgrade majeur | Orchestré mais déclenché/planifié selon service | Préchecks, tests, rollback | Client de bout en bout |
| Backups physiques/PITR | Fournisseur | Rétention, tests, procédure | Client |
| Sauvegardes logiques/export | Partiellement | Client | Client |
| HA intra-région | Fournisseur si option activée | Architecture app, tests | Client construit Patroni/repmgr/etc. |
| DR inter-région | Briques fournies | Design, runbook, décision de bascule | Client |
| Réseau privé | Brique cloud | DNS, routes, règles, architecture | Client |
| Rôles SQL et privilèges | Non | Client | Client |
| Index, statistiques, autovacuum | Non | Client | Client |
| SQL applicatif et transactions | Non | Client | Client |
| Coûts et capacité | Tarification et métriques | Client | Client |
Le fournisseur gère la disponibilité du service
Cela ne garantit pas que votre application se reconnecte, que votre pool invalide les connexions mortes, que vos DNS sont corrects, que vos transactions sont idempotentes ou que votre job de clôture supporte un failover.
Le fournisseur gère les backups
Cela ne prouve pas que votre RTO est compatible avec la taille de la base, que les rôles et objets sont restaurés comme prévu, ni que l’équipe sait retrouver une ligne supprimée à 14 h 37.
Le fournisseur chiffre le stockage
Cela ne protège pas contre un rôle SQL trop puissant, une injection SQL, une fuite de secret applicatif, un export S3/Blob public ou un compte cloud compromis.
Le fournisseur expose des métriques
Cela ne définit ni les seuils, ni les SLO, ni les alertes utiles, ni les corrélations entre waits PostgreSQL, trafic applicatif et saturation de la connexion.
Le PaaS supprime des tâches, mais transforme plusieurs responsabilités techniques en responsabilités de configuration, validation et gouvernance.
| Sujet | Cloud Platform | DBA PostgreSQL | DevOps/SRE | Développeur | Sécurité |
|---|---|---|---|---|---|
| Création ressource | A/C | C | R | I | C |
| Paramètres PostgreSQL | I | R/A | C | C | I |
| Réseau privé/DNS | C | C | R/A | I | C |
| Rôles et grants | I | R/A | C | C | C |
| PITR trimestriel | C | R | A | I | C |
| Failover game day | C | R | A | C | I |
| Tuning SQL | I | R | C | A/R | I |
| Gestion des coûts | C | R | A | I | I |
| Incident P1 | C | R | A | C | C |
R = réalise, A = accountable, C = consulté, I = informé. Le tableau doit être adapté à votre organisation, mais l’absence de propriétaire explicite est toujours un risque.
Niveau 1 — PaaS naïf
- Création au portail
- Pas d’IaC
- Backups jamais testés
- Alertes par défaut
- Compte admin utilisé partout
Niveau 2 — PaaS industrialisé
- Terraform/Bicep/CloudFormation
- Réseau privé
- Rôles séparés
- Alertes et dashboards
- Tests PITR et failover
Niveau 3 — Database Platform
- Golden modules
- Policy as code
- Self-service contrôlé
- SLO et capacity model
- FinOps et game days
| Couche | À construire | À maintenir | Risque classique |
|---|---|---|---|
| Linux | Image, durcissement, users, sudo, time sync | Patches, CVE, capacité disque | Dérive de configuration |
| Stockage | Volumes, filesystem, mount, IOPS | Expansion, latence, corruption | Disque plein ou mauvais montage |
| PostgreSQL | Packages/build, cluster, paramètres | Mineurs, majeurs, extensions | Configuration incohérente |
| HA | Patroni/repmgr/pg_auto_failover, etcd/Consul | Quorum, fencing, failover | Split-brain |
| Backups | pgBackRest/Barman, repository, WAL archive | Rétention, vérification, restores | Backup présent mais inutilisable |
| Monitoring | postgres_exporter, node exporter, logs | Dashboards, alertes, cardinalité | Incident vu trop tard |
| Sécurité | Firewall, TLS, secrets, audit | Rotation, patching, revue droits | Compte trop puissant ou secret oublié |
Composants minimaux
- Un primaire et au moins un standby
- Réplication streaming
- DCS ou mécanisme d’élection
- Health checks
- Fencing / garantie d’unicité du primaire
- Endpoint stable : VIP, proxy ou DNS
- Procédure de rejoin/rebuild
Questions difficiles
- Que se passe-t-il lors d’une partition réseau ?
- Qui a le droit de promouvoir ?
- Comment empêcher deux primaires ?
- Le standby est-il suffisamment à jour ?
- Comment réintégrer l’ancien primaire ?
- Que devient le pool applicatif ?
Installer Patroni ne suffit pas. La haute disponibilité est un système distribué : quorum, fencing, réseau, DNS, stockage, réplication, observabilité et application doivent être testés ensemble.
| Brique | Décision nécessaire | Test indispensable |
|---|---|---|
| Full/base backup | Fréquence, compression, repository | Restore complet sur hôte vierge |
| Archivage WAL | Durabilité, latence, monitoring | PITR à un timestamp arbitraire |
| Rétention | Jour/semaine/mois, légale | Suppression sans casser la chaîne |
| Chiffrement | At rest et in transit | Récupération des clés |
| Immutabilité | WORM/object lock/offline | Résistance à un compte compromis |
| Catalogue | Metadata et inventaire | Recherche d’un point restaurable |
| DR | Copie hors site/région | Restauration sans plateforme primaire |
# Exemple conceptuel pgBackRest [global] repo1-type=s3 repo1-path=/pgbackrest/prod repo1-retention-full=4 repo1-bundle=y repo1-block=y archive-async=y [prod] pg1-path=/var/lib/postgresql/16/main
- Extension ou build non supporté : module interne, bibliothèque C, background worker spécifique.
- Tuning système déterminant : huge pages, scheduler, filesystem, NUMA, kernel, stockage local NVMe.
- Topologie avancée : réplication physique complexe, cascades particulières, delayed replicas, multi-volume.
- Contraintes de souveraineté : environnement hors cloud public ou exigences d’accès local.
- Équipe plateforme mature : automatisation, images, HA, backup, observabilité et astreinte déjà industrialisés.
- Économie à grande échelle : sur certains parcs très importants, une plateforme interne peut amortir ses coûts fixes.
Choisir la VM parce que “le DBA préfère garder la main” est insuffisant. Choisir la VM parce qu’une exigence mesurable ne peut pas être satisfaite par le PaaS est une justification solide.
Azure Database for PostgreSQL Flexible Server est un service PostgreSQL managé qui sépare le compute de la couche de stockage et propose des options de haute disponibilité, de sauvegarde, de réseau privé, de monitoring et d’identité intégrées. Le moteur reste PostgreSQL, mais son environnement d’exécution appartient à Azure.
Le mot “Flexible” signifie davantage de choix que les anciennes offres historiques, pas un accès libre au système hôte.
Exploitation
- Provisioning API/IaC
- Patches plateforme
- Backups/PITR
- HA intégrée
- Scaling compute/storage
Intégration Azure
- VNet / Private Link
- Private DNS
- Microsoft Entra ID
- Managed Identity
- Key Vault / CMK
- Azure Monitor
PostgreSQL
- Paramètres exposés
- Extensions allowlistées
- PgBouncer intégré
- Read replicas
- Réplication logique encadrée
| Sujet | Comportement Azure | Conséquence |
|---|---|---|
| OS / SSH | Non accessible | Pas d’agent ni tuning kernel |
| SUPERUSER | Réservé au service | azure_pg_admin n’est pas un superuser complet |
| Extensions | Sous-ensemble supporté + allowlist | Validation obligatoire avant migration |
| Backups physiques | Gérés et non exportables | Utiliser pg_dump/pg_restore pour la portabilité |
| PITR | Crée un nouveau serveur | Prévoir DNS, validation et cutover |
| Storage downsize | Non supporté directement | Dump/restore vers un nouveau serveur |
| Read replicas | Asynchrones, jusqu’à cinq selon documentation actuelle | Lag à mesurer, pas de lecture fortement cohérente |
| Standby HA | Non lisible | HA ≠ read scaling |
- Applications déjà hébergées dans Azure avec VNet, Entra ID, Managed Identity et Azure Monitor.
- Organisations Microsoft-centric souhaitant centraliser identités, politiques, clés et observabilité.
- Workloads PostgreSQL standards qui profitent d’un PgBouncer intégré et d’une HA zone-redundant.
- Équipes qui veulent réduire la surface Linux/DB à maintenir sans abandonner PostgreSQL.
- Plateformes où Bicep/Terraform et Azure Policy servent déjà de cadre de déploiement.
Amazon RDS for PostgreSQL exécute PostgreSQL dans une plateforme gérée par AWS. Vous choisissez classe d’instance, stockage, réseau, backups, mode Multi-AZ et options de monitoring. AWS gère l’hôte et réserve le vrai superuser. RDS for PostgreSQL ne doit pas être confondu avec Amazon Aurora PostgreSQL-Compatible, qui possède une architecture de stockage différente.
| Mode | Topologie | Lecture sur standby | Usage |
|---|---|---|---|
| Multi-AZ DB instance | 1 primaire + 1 standby | Non | Haute disponibilité classique |
| Multi-AZ DB cluster | 1 writer + 2 readers dans 3 AZ | Oui | HA + capacité de lecture |
| Read replica | Replica asynchrone indépendante | Oui | Read scaling, DR, reporting |
| Single-AZ | Une instance | Non | Dev/test ou faible criticité |
“Multi-AZ” ne signifie pas toujours la même architecture. Le mode instance à standby unique ne fournit pas de lecture sur le standby ; le cluster Multi-AZ en fournit.
Exploitation
- Provisioning API/IaC
- Backups/PITR
- Multi-AZ
- Storage autoscaling
- Maintenance windows
Intégration AWS
- VPC / Security Groups
- IAM DB Authentication
- KMS
- Secrets Manager
- CloudWatch
- RDS Proxy
PostgreSQL
- Parameter groups
- Extensions supportées
- Read replicas inter-région
- Logical replication
- Blue/Green selon conditions
| Sujet | Comportement RDS | Conséquence |
|---|---|---|
| Host OS | Non accessible | Pas de root, package OS ou agent arbitraire |
| SUPERUSER | rds_superuser seulement | Certaines tâches nécessitent procédures/rôles AWS |
| Parameter groups | Sous-ensemble dynamique/statique | Reboot pour les paramètres statiques |
| Extensions | Catalogue par version | Impossible de compiler librement un module |
| Tablespaces | Compatibilité logique, volume unique | Pas de séparation I/O par tablespace |
| Backups auto | 0–35 jours sur instance, 1–35 sur cluster Multi-AZ | Le choix de rétention fait partie du design |
| IAM auth | Token court, contraintes spécifiques | Ne remplace pas toujours les mots de passe |
| Read replicas | Asynchrones | Lag et promotion à orchestrer |
| Étape | PaaS Azure/AWS | VM autogérée |
|---|---|---|
| Compute | SKU/classe sélectionnée | Créer VM, image, CPU/RAM, anti-affinité |
| Stockage | Paramètres du service | Créer/attacher/formater/monter volumes |
| PostgreSQL | Moteur provisionné | Installer packages, initdb, config |
| Backups | Option et rétention | Installer outil, repository, WAL archive |
| HA | Option de déploiement | Installer replicas, DCS, fencing, endpoint |
| Monitoring | Métriques/logs natifs | Installer exporters, agents, dashboards |
| Sécurité | Réseau/identité/KMS/Key Vault | Durcir OS, firewall, TLS, secrets |
| Délai réaliste | Minutes à heures | Heures à jours sans plateforme existante |
# Extrait conceptuel Terraform — Azure
resource "azurerm_postgresql_flexible_server" "db" {
name = var.name
resource_group_name = var.resource_group
location = var.location
version = var.pg_version
delegated_subnet_id = var.subnet_id
private_dns_zone_id = var.private_dns_zone_id
sku_name = var.sku_name
storage_mb = var.storage_mb
backup_retention_days = var.backup_retention_days
geo_redundant_backup_enabled = var.geo_backup
high_availability {
mode = var.ha_mode
}
}- Créer explicitement réseau, DNS privé, identité, logs diagnostics et alertes.
- Versionner les paramètres PostgreSQL séparément.
- Ajouter locks/policies/tags/budget et RBAC.
- Ne jamais considérer le module “terminé” sans test de connexion, backup et failover.
# Extrait conceptuel Terraform — AWS RDS
resource "aws_db_instance" "db" {
identifier = var.name
engine = "postgres"
engine_version = var.pg_version
instance_class = var.instance_class
allocated_storage = var.storage_gib
max_allocated_storage = var.max_storage_gib
storage_type = var.storage_type
multi_az = var.multi_az
backup_retention_period = var.backup_retention_days
db_subnet_group_name = var.subnet_group
vpc_security_group_ids = var.security_groups
parameter_group_name = aws_db_parameter_group.pg.name
storage_encrypted = true
deletion_protection = true
}- Séparer subnet group, security groups, KMS, parameter group et option de monitoring.
- Décider explicitement Multi-AZ instance vs Multi-AZ cluster.
- Activer deletion protection et snapshot final selon politique.
- Associer alarmes CloudWatch et événements RDS.
| Contrôle obligatoire | Pourquoi |
|---|---|
| Réseau privé par défaut | Éviter l’exposition publique accidentelle |
| Chiffrement et clé définie | Éviter une ressource non conforme |
| Backup retention minimale | Garantir un plancher de récupération |
| Protection contre suppression | Réduire les erreurs humaines |
| Logs/metrics/alerts | Éviter les bases invisibles |
| Tags propriétaire/coût/criticité | Faciliter gouvernance et FinOps |
| Fenêtre de maintenance | Rendre les changements prévisibles |
| Version et extensions déclarées | Éviter la dérive |
| Test automatisé de connexion | Valider réseau et authentification |
| Runbook associé | Relier ressource et exploitation |
- Backups physiques automatiques basés sur snapshots et archivage continu des WAL.
- Rétention configurable de 7 jours par défaut à 35 jours maximum pour la sauvegarde opérationnelle.
- PITR vers un nouveau serveur ; l’existant n’est pas écrasé.
- Backups gérés non exportables hors du service ; utiliser pg_dump/pg_restore pour une copie portable.
- Option de sauvegarde géo-redondante à décider à la création ; la restauration distante n’est pas un PITR complet et peut avoir un décalage.
- Long-term retention via Azure Backup avec limites et modalités distinctes à vérifier.
La procédure de reprise doit inclure la création du nouveau serveur, son réseau/DNS, la validation des données, la remise des rôles/secrets et le basculement applicatif.
- Backups automatiques de l’instance complète et journaux permettant un point-in-time restore.
- Rétention de 0 à 35 jours pour une DB instance ; 0 désactive les backups automatiques. Pour un Multi-AZ DB cluster, la plage est de 1 à 35 jours.
- Restauration vers une nouvelle instance ou un nouveau cluster.
- Snapshots manuels conservés indépendamment de la fenêtre automatique jusqu’à suppression.
- Réplication de backups entre régions disponible dans certains modes, avec différences selon la topologie.
- Export ou sauvegarde logique nécessaire pour les scénarios de portabilité fine.
Mettre la rétention à 0 supprime la capacité PITR et peut provoquer une interruption lors du changement de 0 vers non-zéro ou inversement. Cette option ne doit jamais être laissée au hasard.
Ce qu’il faut construire
- Base backups cohérents
- Archivage WAL continu
- Repository durable et chiffré
- Rétention et pruning
- Monitoring des backups et WAL
- Catalogue et inventaire
- Copies hors site/région
Ce qu’il faut prouver
- Restore complet
- PITR avant une erreur logique
- Restauration des rôles
- Restauration après perte du site
- Récupération des clés
- Temps réel de reprise
| Test | Fréquence recommandée | Critère de réussite |
|---|---|---|
| PITR technique | Mensuel ou trimestriel | Serveur restauré au timestamp demandé |
| Restauration applicative | Trimestriel | Application connectée et contrôles métier OK |
| Restauration régionale | Semestriel | Réseau, secrets et DNS reconstruits |
| Suppression accidentelle | Game day | Équipe retrouve la bonne transaction |
| Compte cloud compromis | Annuel | Backups protégés/immuables selon design |
| Mesure RTO | À chaque test | Durée mesurée, pas estimée |
| Mesure RPO | À chaque test | Perte maximale documentée |
Un backup n’existe pas opérationnellement tant qu’une restauration complète et chronométrée n’a pas été réussie.
| Mode | Protection | Réplication | Lecture standby | Failover |
|---|---|---|---|---|
| Sans HA | Résilience du nœud/stockage gérée mais pas de standby dédié | N/A | Non | Redémarrage/relocalisation du service |
| Same-zone HA | Panne de nœud dans la zone | Synchrone | Non | Automatique |
| Zone-redundant HA | Panne de nœud et de zone | Synchrone | Non | Automatique, documentation indicative 60–120 s selon conditions |
La réplication synchrone vise zéro perte de données sur les événements couverts, mais peut ajouter de la latence d’écriture. Le standby HA n’est pas utilisable pour les lectures : il faut des read replicas séparées.
| Mode | Topologie | Lecture | Caractéristique |
|---|---|---|---|
| Multi-AZ DB instance | Writer + standby | Standby non lisible | HA classique avec endpoint stable |
| Multi-AZ DB cluster | Writer + 2 readers dans 3 AZ | Readers lisibles | HA et read capacity |
| Read replica | Replica asynchrone | Oui | Scaling/DR, promotion distincte |
AWS détecte différents événements de panne et orchestre le failover. L’application doit cependant gérer les connexions cassées, la résolution DNS, les transactions interrompues et le retry contrôlé.
- Définir synchronous_mode, maximum_lag_on_failover et stratégie de quorum.
- Garantir qu’un ancien primaire ne puisse pas continuer à écrire.
- Tester partition réseau, perte DCS, perte stockage, perte zone et failback.
- Automatiser rebuild et rejoin des anciens primaires.
- Reconnecter proprement après rupture de socket.
- Utiliser des timeouts de connexion et de requête.
- Limiter les retries et appliquer du jitter/backoff.
- Rendre idempotentes les opérations rejouables.
- Identifier les transactions dont le résultat est inconnu après coupure.
- Verrouiller les migrations et jobs sensibles pendant les bascules planifiées.
- Tester les pools : PgBouncer, RDS Proxy, HikariCP, Npgsql, psycopg, etc.
Une base peut avoir basculé correctement tandis que l’application reste en panne à cause d’un pool qui conserve des connexions mortes ou d’un DNS mal résolu.
- Replicas en lecture seule, mises à jour de façon asynchrone par réplication physique native.
- Jusqu’à cinq replicas selon la documentation actuelle.
- Replicas intra-région ou géographiques selon disponibilité et configuration.
- Chaque replica est facturée comme un serveur avec compute et stockage.
- Promotion possible vers un serveur autonome, mais la procédure doit être intégrée au runbook.
- Read replicas RDS for PostgreSQL utilisant la réplication streaming PostgreSQL.
- Replicas intra-région et inter-région possibles.
- Promotion d’une replica vers une instance autonome possible.
- Multi-AZ DB cluster fournit également deux readers intégrés.
- RDS Proxy peut réduire le coût de connexion et améliorer le comportement lors de failovers dans certains scénarios.
| Piège | Effet | Contrôle |
|---|---|---|
| Lag | Lecture ancienne | Mesurer lag en secondes et bytes |
| Longue requête sur replica | Conflits/recovery delay | Limiter durée et adapter paramètres exposés |
| Reporting lourd | I/O et réseau saturés | Replica dédiée et fenêtres |
| Lecture après écriture | Incohérence fonctionnelle | Sticky reads ou lecture primaire |
| Replica considérée comme backup | Erreur logique propagée | Backups/PITR indépendants |
| Promotion non préparée | DNS/secrets/roles non prêts | Runbook et test |
| Coût ignoré | Doublement compute + stockage | FinOps par workload |
Lecture eventual consistent
Catalogue, reporting, dashboards, recherche non transactionnelle.
Read-your-writes
Rester sur le writer pendant une fenêtre ou jusqu’à un marqueur de réplication.
Workload isolation
Déporter BI, exports et scans lourds sur une replica dédiée.
# Pseudo-routing
if request.requires_strong_consistency:
use(writer)
elif session.has_recent_write:
use(writer)
else:
use(read_replica_pool)| Scénario | Mécanisme principal | Pourquoi |
|---|---|---|
| Panne d’instance/nœud | HA intra-région | Bascule rapide, zéro ou faible perte |
| Panne de zone | Zone-redundant / Multi-AZ | Protection zonale |
| Panne de région | Geo replica / cross-region replica / backup distant | Reconstruction dans une autre région |
| Suppression logique | PITR | Une replica reproduit l’erreur |
| Corruption applicative lente | Delayed replica ou backup historique | Besoin d’un point antérieur |
| Compromission compte cloud | Backup isolé/immuable | Éviter suppression simultanée |
- Geo-replication via read replicas vers d’autres régions supportées.
- Geo-redundant backup à choisir à la création, avec copie asynchrone et restauration dans la région jumelée.
- La documentation indique qu’un geo-restore peut avoir jusqu’à environ une heure de RPO selon la réplication de sauvegarde.
- Pour des workloads critiques, les geo-replicas et endpoints stables doivent être étudiés plutôt qu’un simple backup distant.
- La bascule régionale reste une décision client : Azure fournit les briques, pas votre validation métier.
- Cross-Region read replicas pour PostgreSQL.
- Réplication de backups automatiques inter-région disponible dans certains modes ; vérifier la topologie choisie.
- Snapshots manuels copiables entre régions et comptes selon politique.
- Route 53, RDS Proxy, secrets et KMS doivent être prévus pour la région de secours.
- La promotion d’une replica est une action distincte du failover Multi-AZ.
- Déclarer la région primaire indisponible selon des critères objectifs.
- Geler les écritures si un risque de double writer existe.
- Promouvoir/restaurer la cible DR.
- Appliquer paramètres, extensions, rôles, secrets et intégrations.
- Basculer DNS/endpoints et valider propagation.
- Exécuter contrôles fonctionnels et réconciliation.
- Communiquer RPO réel et données potentiellement absentes.
- Préparer la stratégie de retour vers la région d’origine.
Une architecture multi-région non testée est souvent plus dangereuse qu’une restauration simple bien maîtrisée, car elle multiplie les dépendances invisibles : clés, quotas, DNS, identité, réseau, observabilité et ordre de bascule.
- Accès privé par intégration VNet ou Private Link selon le mode de déploiement.
- Private DNS indispensable pour une résolution cohérente depuis VNets, peering, VPN ou ExpressRoute.
- Microsoft Entra ID pour utilisateurs, groupes, service principals et managed identities.
- Possibilité de désactiver l’authentification locale dans certains scénarios de conformité.
- Chiffrement au repos activé ; options de clés gérées par le client selon configuration.
- Azure Monitor, diagnostic settings et Defender/Policy peuvent compléter la posture.
La plupart des incidents “réseau PaaS” viennent d’un DNS privé, d’un peering, d’une route ou d’une règle de sécurité incohérente, pas du moteur PostgreSQL.
- RDS déployé dans un VPC avec DB subnet group et security groups.
- Public accessibility à désactiver par défaut pour la production.
- IAM Database Authentication avec tokens temporaires ; le rôle rds_iam modifie le mode d’authentification du rôle PostgreSQL.
- AWS Secrets Manager pour stocker et faire tourner les credentials.
- KMS pour le chiffrement du stockage, snapshots et replicas d’une instance chiffrée.
- CloudWatch Logs, events et CloudTrail pour la traçabilité du plan de contrôle.
| Compte | Usage recommandé | Interdit |
|---|---|---|
| Admin PaaS | Bootstrap, rôles, opérations rares | Connexion applicative quotidienne |
| Owner de schéma | Migrations contrôlées | Exécution runtime de l’application |
| Compte applicatif | CRUD strictement nécessaire | CREATE EXTENSION, role admin, ownership global |
| Compte lecture | Reporting/BI | Écriture ou DDL |
| Compte support | Diagnostic limité et temporaire | Privilèges permanents élevés |
| Break-glass | Incident majeur, MFA, audit | Usage normal |
-- Exemple de séparation CREATE ROLE app_owner NOLOGIN; CREATE ROLE app_runtime LOGIN; CREATE SCHEMA app AUTHORIZATION app_owner; GRANT USAGE ON SCHEMA app TO app_runtime; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app TO app_runtime; ALTER DEFAULT PRIVILEGES FOR ROLE app_owner IN SCHEMA app GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_runtime;
| Menace | Protection fournisseur | Protection client |
|---|---|---|
| Disque volé | Chiffrement at rest | Choix clés/rotation et droits KMS/Key Vault |
| Accès Internet | Briques réseau privé | Architecture DNS/routes/firewall |
| Injection SQL | Aucune | Paramétrage, requêtes préparées, moindre privilège |
| Compte admin compromis | IAM/RBAC/MFA disponibles | PIM, break-glass, audit, séparation |
| Secret dans Git | Aucune | Scanner, vault, rotation |
| Export de données | Logs/contrôles partiels | DLP, grants, audit, réseau egress |
| Suppression ressource | Protection optionnelle | Locks, deletion protection, policy |
| Ransomware cloud | Backups gérés | Isolation, immutabilité, comptes séparés |
Le compte administrateur d’un Flexible Server dispose de privilèges élevés adaptés au service, mais il n’est pas le superuser PostgreSQL réel. Le service réserve les opérations susceptibles d’affecter l’hôte, les autres tenants ou l’orchestration interne.
- Pas de SSH ni accès root.
- Pas de lecture directe de postgresql.conf, pg_hba.conf ou PGDATA.
- Pas de manipulation manuelle des WAL ou fichiers de relation.
- Pas de compilation ou chargement arbitraire de bibliothèque native.
- Rôles administratifs Azure spécifiques pour les tâches autorisées.
RDS crée un rôle administratif disposant de rds_superuser, mais le rôle postgres n’a pas l’attribut PostgreSQL SUPERUSER. AWS remplace certaines opérations par des rôles ou fonctions RDS spécifiques.
- Pas de host access.
- Pas de vrai superuser.
- Restrictions sur certaines vues, fonctions et procédures système.
- Tâches adaptées via rds_superuser, rds_replication, rdsadmin ou procédures documentées.
- Certaines commandes de dump/import global nécessitant superuser doivent être adaptées.
| Besoin | Impact PaaS | Alternative éventuelle |
|---|---|---|
| Compiler une extension C interne | Bloqué | VM, service custom, fonctionnalité applicative |
| Modifier kernel/THP/NUMA | Bloqué | Choix de SKU, VM |
| Accéder aux datafiles | Bloqué | SQL, vues, logs exposés, support fournisseur |
| Créer un tablespace sur un volume distinct | Bloqué ou sans effet physique | Partitionnement, service séparé, VM |
| strace/perf/eBPF | Bloqué | Métriques fournisseur, support, reproduction sur VM |
| Agent antivirus/EDR local | Bloqué | Contrôles du service et réseau |
| Manipulation pg_hba.conf fine | Encadrée par service | Firewall + rôles + SSL |
| Custom PostgreSQL build | Bloqué | VM/bare metal |
- Le workload utilise des extensions courantes déjà supportées.
- Le diagnostic s’effectue correctement via pg_stat_statements, vues système, logs et métriques.
- Le tuning repose surtout sur SQL, index, mémoire, connexions et capacité.
- Les exigences de sécurité préfèrent justement l’absence d’accès OS.
- L’organisation ne souhaite pas supporter une plateforme Linux/PostgreSQL complète.
Faire un inventaire concret de chaque opération nécessitant aujourd’hui root ou superuser. Beaucoup relèvent d’une habitude historique et peuvent être remplacées ; quelques-unes sont réellement bloquantes.
| Catégorie | Azure | AWS RDS | VM |
|---|---|---|---|
| Paramètres dynamiques | Sous-ensemble exposé | Custom parameter group ou SQL | Libres selon PostgreSQL |
| Paramètres statiques | Restart géré requis | Reboot requis | Restart/reload contrôlé |
| Superuser-only | Souvent non modifiables | Souvent non modifiables | Modifiables |
| shared_preload_libraries | Liste encadrée | Liste encadrée par extensions/modules | Libre |
| Kernel/filesystem | Non | Non | Oui |
| Build-time options | Non | Non | Oui |
Ne comparez pas uniquement les valeurs actuelles de pg_settings. Comparez aussi le droit de modifier, la plage autorisée, le besoin de restart et les interactions avec le SKU.
| Étape | Azure | AWS RDS |
|---|---|---|
| Disponibilité | Liste par nom/version | Liste par moteur/version |
| Activation | Allowlist via azure.extensions puis CREATE EXTENSION | CREATE EXTENSION selon droits et rds.allowed_extensions éventuel |
| Trusted extensions | Selon support Azure | Installables par rôles autorisés sur versions récentes selon documentation |
| Background worker | Considérations shared_preload_libraries | Paramètres et support RDS |
| Upgrade extension | Version fournie par Azure | Version fournie par RDS |
| Extension custom | Non | Non |
- Inventorier extname/extversion.
- Vérifier version cible exacte.
- Tester CREATE/ALTER EXTENSION.
- Identifier shared_preload_libraries.
- Vérifier droits superuser et dépendances OS.
- Tester restore et upgrade majeur.
Azure
Les tablespaces custom ne sont pas supportés dans le modèle classique en raison de l’absence de superuser et de filesystem accessible. Lors d’une migration, les objets sont généralement replacés dans les tablespaces par défaut.
AWS RDS
RDS for PostgreSQL supporte les tablespaces pour compatibilité, mais tout le stockage se trouve sur un volume logique unique : impossible de les utiliser pour isoler ou répartir les I/O comme sur une VM.
Sur VM, les tablespaces permettent un placement physique, mais ajoutent une forte complexité aux backups, restores, migrations, permissions et remplacements de volumes. Beaucoup de conceptions historiques les utilisent alors qu’un stockage moderne uniforme suffit.
-- Extensions SELECT extname, extversion FROM pg_extension ORDER BY 1; -- Paramètres non par défaut SELECT name, setting, unit, source, context, pending_restart FROM pg_settings WHERE source <> 'default' ORDER BY 1; -- Tablespaces SELECT oid, spcname, pg_tablespace_location(oid) FROM pg_tablespace ORDER BY 2; -- Shared preload SHOW shared_preload_libraries; -- Réplication logique et physique SELECT * FROM pg_replication_slots; SELECT * FROM pg_publication; SELECT * FROM pg_subscription; SELECT * FROM pg_stat_replication;
| Action | Azure | AWS RDS | VM |
|---|---|---|---|
| Augmenter CPU/RAM | Modifier SKU/tier, opération gérée | Modifier instance class | Resize VM ou migration |
| Réduire CPU/RAM | Possible selon contraintes et downtime | Possible selon classe et contraintes | Possible mais risque capacité |
| Impact | Restart/failover ou near-zero downtime selon mode actuel | Reboot/failover selon topologie | Restart ou migration |
| Validation | Connexions, mémoire, HA, coûts | Parameter group, IOPS, failover | Kernel, huge pages, storage, HA |
Le PaaS rend l’opération accessible par API, mais le DBA doit toujours vérifier la mémoire par connexion, les plans, la saturation I/O, la taille du working set et la réaction de l’application.
| Sujet | Azure | AWS RDS | VM |
|---|---|---|---|
| Croissance | Scale up encadré, incréments et restart possibles selon service | Augmentation + storage autoscaling optionnel | Extension volume/filesystem manuelle |
| Diminution | Non directe, nouveau serveur + migration | Généralement non directe, nouvelle instance/migration | Possible mais risquée et rarement en ligne |
| IOPS | Dépend tier/type/taille | gp3/io1/io2 et paramètres | Volume/EBS/NVMe/filesystem libres |
| Disque plein | Métriques et mécanismes du service | Storage autoscaling si configuré | Astreinte et procédure interne |
| Multi-volume | Abstrait | Volume logique service | Libre |
- Définir un maximum de stockage pour éviter une croissance financière sans limite.
- Alerter sur free space, WAL growth, bloat, temp files et slots de réplication.
- Prévoir que l’augmentation ne corrige pas une fuite de WAL ou un index inutile.
- Tester l’impact d’un scale sur connexions, réplication logique et maintenance.
- Conserver un capacity model : croissance mensuelle, saisonnalité, marge et délai d’action.
L’autoscaling empêche parfois la panne immédiate mais peut masquer une dérive de données, de WAL ou de requêtes temporaires. Il doit acheter du temps, pas remplacer l’analyse.
Capacité utile = max( working_set_memory, peak_concurrency_memory, maintenance_memory, OS/service overhead ) Stockage cible = data + indexes + bloat + temp + WAL reserve + growth_margin IOPS cible = foreground reads/writes + WAL + checkpoints + vacuum + backup/replication
| Indicateur | Seuil d’attention | Action |
|---|---|---|
| CPU p95 | > 70–80 % prolongé | Analyser waits/SQL avant scale |
| Mémoire | swap/evictions ou cache insuffisant | Réduire connexions, scale mémoire |
| Storage free | < 20 % ou délai court avant saturation | Nettoyer/augmenter |
| IO latency | Hausse durable | Plans, checkpoints, storage tier |
| Replica lag | Croissance continue | Capacité réseau/IO/queries |
| Connections waiting | Non nul durable | Pool, max, transaction length |
- Matériel et virtualisation selon le SKU choisi.
- Stockage et réplication interne du service.
- Paramètres par défaut raisonnables pour une classe générique.
- Patching du moteur et de la plateforme.
- Métriques d’infrastructure et parfois recommandations.
Un fournisseur ne connaît pas vos cardinalités futures, vos règles métier, vos pics de clôture, votre besoin de cohérence ou la qualité de vos requêtes ORM.
| Domaine | Travail DBA |
|---|---|
| Plans d’exécution | EXPLAIN (ANALYZE, BUFFERS, WAL), estimation cardinalité |
| Index | Choix, ordre, partial, covering, doublons, bloat |
| SQL | Joins, sous-requêtes, agrégations, pagination, batch |
| Autovacuum | Seuils par table, freeze, dead tuples, workers |
| Statistiques | default_statistics_target, extended stats, ANALYZE |
| Connexions | Pool, transaction mode, sessions longues |
| Verrous | Transactions, DDL, deadlocks, lock chains |
| Mémoire | work_mem par opération, maintenance_work_mem, cache |
| Checkpoint/WAL | Volume WAL, checkpoint pressure, replication slots |
| Partitionnement | Pruning, maintenance, rétention, indexes locaux |
Azure
- Azure Monitor metrics/logs
- Query performance / pg_stat_statements selon configuration
- Server logs et diagnostic settings
- PgBouncer intégré
- Alertes sur connexions, CPU, storage, lag
AWS
- CloudWatch Database Insights / Performance Insights
- Enhanced Monitoring OS
- CloudWatch Logs
- RDS events
- RDS Proxy
- Wait events et métriques replica lag
- Qualifier le symptôme : latence, throughput, timeout, CPU, I/O, lock ou connexion.
- Comparer période saine et période lente.
- Identifier les waits dominants et les top SQL.
- Vérifier saturation CPU/mémoire/IOPS/connexions.
- Analyser plans et volumes réellement lus.
- Contrôler autovacuum, bloat, checkpoints et WAL.
- Valider une hypothèse avec test reproductible.
- Mesurer après correction et conserver le rollback.
SELECT pid, usename, state, wait_event_type, wait_event,
now() - query_start AS age, left(query, 200)
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY query_start;
SELECT queryid, 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 20;- Chaque connexion PostgreSQL consomme mémoire et structures internes.
- Les connexions très courtes ajoutent du CPU et de la latence.
- Les milliers de clients serverless peuvent dépasser la capacité du moteur.
- Un pool amortit l’authentification, limite la concurrence et protège le serveur.
- Le pool doit être dimensionné sur les transactions actives, pas sur le nombre d’utilisateurs.
Azure Flexible Server propose PgBouncer intégré sur certains tiers. Le mode transaction est généralement le point de départ pour absorber de nombreuses connexions applicatives, mais il modifie la sémantique des sessions.
| Fonction | Compatible transaction pooling ? | Commentaire |
|---|---|---|
| Transactions classiques | Oui | Connexion serveur attribuée pendant la transaction |
| SET session persistant | Non fiable | Préférer SET LOCAL ou init explicite |
| Prepared statements session | À vérifier selon version/mode | Peut nécessiter adaptation |
| Temp tables | Risque | Session serveur non garantie |
| LISTEN/NOTIFY | Risque | Dépendance à la session |
| Advisory locks session | Risque | Préférer transaction-level si possible |
RDS Proxy mutualise les connexions et peut améliorer la résilience des applications lors de failovers en reconnectant vers un standby. Il est utile pour les architectures à forte création de connexions, notamment serverless, mais il ajoute un composant, un coût et des contraintes de compatibilité.
- Évaluer le pinning de session.
- Mesurer le nombre de connexions DB réellement ouvertes.
- Tester authentification Secrets Manager/IAM.
- Valider le comportement pendant failover.
- Ne pas cumuler plusieurs pools sans modèle clair.
# Modèle simplifié DB active connections = min( pool_size_per_instance * application_instances, database_safe_concurrency ) # Exemple 20 connexions par pod * 50 pods = 1000 connexions potentielles Si la DB ne doit accepter que 150 transactions concurrentes : - pool externe / proxy - pool local réduit - backpressure applicative
Multiplier le pool applicatif par le nombre de pods est la cause classique d’une explosion de connexions après autoscaling Kubernetes.
| Niveau | Exemples | Question |
|---|---|---|
| Infrastructure | CPU, mémoire, IOPS, latence disque, réseau | La ressource est-elle saturée ? |
| PostgreSQL | Waits, locks, checkpoints, WAL, vacuum, connections | Pourquoi le moteur attend-il ? |
| Application/métier | Latence endpoint, taux erreur, jobs, commandes | Quel impact utilisateur ? |
Un incident doit pouvoir être suivi du symptôme utilisateur au SQL, puis au wait PostgreSQL et à la métrique de plateforme.
- Métriques Azure Monitor émises à intervalle régulier, avec alertes et rétention selon la plateforme.
- Diagnostic settings pour exporter logs et métriques vers Log Analytics, Event Hub ou stockage.
- Métriques de connexions, stockage, CPU, réplication, HA et disponibilité.
- Alertes sur is-db-alive, storage, CPU, connections waiting, replica lag et HA health.
- Workbooks/dashboards pour une vue plateforme.
- CloudWatch metrics et alarms.
- Enhanced Monitoring pour des métriques OS et processus exposées par RDS.
- Performance Insights / CloudWatch Database Insights pour DB load, waits, SQL, hosts et users.
- Export des logs PostgreSQL vers CloudWatch Logs.
- RDS Events et EventBridge/SNS pour maintenance, failover et incidents.
| Signal | Alerte | Contexte |
|---|---|---|
| CPU | Seuil + durée, pas pic isolé | Corréler top SQL et waits |
| Storage free | Prédiction de saturation | Inclure WAL/slots/temp |
| Connections | Active + waiting + churn | Corréler pool et pods |
| Replica lag | Seuil selon usage | Reporting vs DR |
| Deadlocks | Toute occurrence ou tendance | Collecter logs et SQL |
| Autovacuum | Tables non vacuumées / wraparound | Priorité critique |
| Checkpoint | Durée/fréquence anormale | I/O et WAL |
| PITR/backup | Échec ou absence de test | Ne pas se contenter du statut |
| Maintenance | Événement à venir | Coordonner avec application |
| Cost anomaly | Écart à baseline | Storage, replicas, logs |
- Azure patch l’infrastructure, l’OS et le moteur dans le cadre du service.
- Les releases de maintenance incluent des correctifs et des versions mineures PostgreSQL choisies par Azure.
- Fenêtre système ou planification personnalisée selon capacités actuelles.
- Le serveur peut redémarrer pendant la maintenance.
- Les fonctions récentes permettent de visualiser, replanifier ou appliquer certaines maintenances selon disponibilité.
Tester les drivers, extensions, prepared statements, procédures et jobs critiques sur la version mineure cible reste indispensable.
- Fenêtre de maintenance configurable.
- Auto minor version upgrade activable ou non selon l’instance et la politique.
- RDS applique une version mineure après test et approbation AWS, durant la fenêtre.
- Mises à jour OS et maintenance pending visibles via console/API.
- Une action déjà démarrée ne se diffère plus ; certaines actions peuvent être appliquées manuellement.
- Veille CVE Linux, OpenSSL, glibc, PostgreSQL et extensions.
- Construction d’image ou patch in-place.
- Répétition sur standby, switchover, patch ancien primaire, rejoin.
- Validation des dépôts et signatures.
- Rollback package/image et compatibilité data directory.
- Astreinte en cas de kernel panic, package cassé ou extension incompatible.
- Inventorier version moteur, extensions, drivers et paramètres.
- Lire release notes fournisseur et PostgreSQL.
- Exécuter tests de régression et charge.
- Vérifier backups/PITR avant fenêtre.
- Communiquer impact et freeze applicatif éventuel.
- Surveiller failover/restart et temps de reconnexion.
- Contrôler version, logs, réplication, jobs et performance après maintenance.
- Documenter anomalies et décider du rollback si possible.
Une version majeure PostgreSQL peut modifier catalogues, comportements de l’optimiseur, types, fonctions, extensions et compatibilité applicative. Le fait qu’Azure ou AWS fournisse une action “Upgrade” ne transforme pas cette opération en simple patch.
| Sujet | À tester |
|---|---|
| Extensions | Version cible, upgrade path, shared preload |
| SQL | Mots réservés, fonctions supprimées, casts |
| Plans | Régressions d’optimiseur et statistiques |
| Drivers | Compatibilité protocole et auth |
| Logical replication | Slots, publications, subscriptions |
| Collations | Versions ICU/glibc et indexes |
| Jobs | pg_cron, batchs, ETL |
| Rollback | Snapshot/restore ou blue/green selon service |
- Upgrade majeur in-place proposé sur chemins supportés.
- Validation/prechecks disponibles et à exécuter avant planification.
- Le processus déploie la dernière version mineure supportée de la cible.
- La durée dépend du volume et surtout du nombre/complexité des objets et extensions.
- Logical replication slots et extensions peuvent bloquer ou nécessiter un traitement spécifique.
- Toujours prévoir une restauration ou migration alternative si l’upgrade ne peut pas être annulé simplement.
- Les upgrades majeurs sont déclenchés manuellement.
- Prechecks vérifient différents blocages : prepared transactions, extensions, types, etc.
- Read replicas et Multi-AZ ont des comportements spécifiques selon topologie.
- Blue/Green Deployments peuvent réduire le risque pour certains scénarios mais ont des limitations, notamment avec logical replication et objets non répliqués.
- Une fois l’upgrade réalisé, le retour nécessite généralement restauration d’un snapshot vers une nouvelle instance.
- Créer un clone ou restaurer un environnement représentatif.
- Exécuter les prechecks officiels.
- Mettre à niveau les extensions et corriger les objets bloquants.
- Rejouer tests fonctionnels et charge.
- Comparer top SQL et plans avant/après.
- Mesurer la durée réelle.
- Choisir in-place, logical migration ou blue/green.
- Définir point de non-retour et procédure de rollback.
- Préparer DNS, secrets, monitoring et jobs sur la cible.
Azure Flexible Server et RDS for PostgreSQL supportent la réplication logique dans des cadres documentés. Cela permet migrations en ligne, CDC, intégration DMS, Debezium ou réplication native. Mais les slots, le WAL et les failovers deviennent des sujets critiques.
| Risque | Effet | Contrôle |
|---|---|---|
| Subscriber arrêté | WAL retenu, stockage rempli | Alerte slot lag + limite/runbook |
| Failover HA | Slot absent ou désynchronisé | Fonction de failover slots/support fournisseur |
| Table sans PK | REPLICA IDENTITY FULL coûteux | Ajouter clé/index adapté |
| DDL non répliqué | Schémas divergents | Pipeline de migrations coordonné |
| Sequences | Valeurs non répliquées automatiquement selon mécanisme | Synchronisation explicite |
| Large transactions | Lag et mémoire | Batching et sizing |
| Upgrade majeur | Abonnements/slots bloquants | Plan dédié |
- Activation via paramètres exposés et restart selon besoin.
- Le rôle admin peut recevoir le droit REPLICATION dans le cadre documenté.
- Les slots inutilisés peuvent conduire à une accumulation WAL ; le service peut appliquer des protections spécifiques.
- Avec HA et scaling near-zero-downtime, utiliser les mécanismes documentés pour préserver/synchroniser les slots, par exemple pg_failover_slots lorsque pertinent.
- Tester le comportement exact de la version et de la région cible.
- Activation via rds.logical_replication et paramètres associés.
- Logical slots disponibles pour DMS, pg_recvlogical, Debezium ou réplication native.
- Un slot n’a aucune connaissance du consumer : un consumer arrêté peut remplir le stockage.
- Multi-AZ DB clusters supportent logical replication sur versions minimales précises ; vérifier le moteur exact.
- Blue/Green et logical replication ont plusieurs limitations documentées.
- Réplication physique entrante/sortante non standard.
- Cascades complexes et contrôle complet des slots physiques.
- Plugins de décodage custom.
- Accès direct aux WAL et outils bas niveau.
- Topologies multi-datacenter hybrides très spécifiques.
- Besoin de patcher le code de réplication ou d’utiliser une build custom.
| Inventaire | Pourquoi |
|---|---|
| Version PostgreSQL et minor | Détermine chemins de migration et extensions |
| Taille data/index/WAL | Dimensionne transfert et RTO |
| Extensions et modules | Premier risque de compatibilité |
| Tablespaces | Placement à convertir |
| Paramètres non défaut | Comparer à la liste exposée |
| Rôles et ownership | Recréer sans superuser |
| FDW, dblink, outbound network | Dépendances externes |
| Logical slots/publications/subscriptions | Risque WAL et cutover |
| Jobs OS/cron | À migrer vers pg_cron ou orchestrateur externe |
| Accès fichiers | Souvent incompatible |
| Drivers et SSL | Chaîne de connexion, certificats, auth |
| RPO/RTO | Choix dump/restore vs online migration |
| Méthode | Downtime | Avantages | Limites |
|---|---|---|---|
| pg_dump/pg_restore | Élevé à moyen | Simple, portable, nettoyage | Temps et volume |
| pg_basebackup/physique | Souvent non applicable vers PaaS | Rapide sur VM | Contrat fournisseur |
| Logical replication native | Faible | Contrôle SQL | DDL, sequences, slots |
| Azure Migration Service | Faible à moyen | Intégration Azure | Limites objets/versions |
| AWS DMS | Faible à moyen | CDC et orchestration | Validation et types spécifiques |
| Read replica / migration mécanisme natif | Faible | Topologie proche | Éligibilité stricte |
| Blue/Green | Faible | Test cible et switchover | Limitations par topologie/version |
- Geler les DDL et déploiements.
- Verrouiller ou arrêter les écritures.
- Attendre le rattrapage CDC/replication.
- Valider row counts, checksums logiques et séquences.
- Créer/valider rôles, grants, extensions et paramètres.
- Basculer secrets, endpoint ou DNS.
- Purger/recréer les pools de connexions.
- Exécuter smoke tests et contrôles métier.
- Surveiller erreurs, waits, lag, CPU, connexions et jobs.
- Déclarer le point de non-retour.
Après les premières écritures sur la cible, comment revenez-vous à la source sans perdre ces nouvelles transactions ?
- Rollback avant ouverture des écritures : simple retour endpoint.
- Rollback après écritures : réplication inverse, double-write maîtrisé ou acceptation d’une perte/reconciliation.
- Conserver la source read-only pendant la période de validation.
- Définir seuils objectifs : erreurs, latence, intégrité, jobs, réplication.
- Chronométrer la décision : plus on attend, plus le retour devient complexe.
- Qualifier si l’incident relève du moteur, du service, du réseau, de l’identité ou de l’application.
- Collecter timestamp UTC, resource ID, endpoint, région/AZ, version, changements récents.
- Capturer métriques, logs PostgreSQL, events fournisseur et top SQL.
- Vérifier capacité, connexions, waits, locks, replication lag et stockage.
- Reproduire la requête ou le scénario sur un clone si possible.
- Ouvrir un ticket fournisseur avec preuves et corrélation temporelle.
- Appliquer le runbook de mitigation : scale, kill session, failover, restore, route traffic.
| Outil VM | Alternative PaaS |
|---|---|
| top/htop | Métriques compute et Enhanced Monitoring |
| iostat | Métriques IOPS/latence/throughput |
| strace | Logs, wait events, support fournisseur |
| perf/eBPF | Performance Insights/DB Insights, reproduction |
| du/find PGDATA | Métriques storage + vues SQL |
| journalctl | Logs service/exportés |
| tcpdump | Network flow logs, diagnostics, support |
| lsof | Vues sessions/connections + metrics |
L’alternative est souvent suffisante pour les incidents standards, mais moins puissante pour les anomalies bas niveau. Le contrat de support fournisseur devient alors une partie de l’architecture.
Disponibilité
- Failover planifié
- Failover non planifié
- Replica lag
- Région indisponible
Données
- PITR
- Table supprimée
- Corruption logique
- Slot WAL runaway
Performance
- CPU 100 %
- Connexions saturées
- Deadlocks
- Storage full
- Définir le niveau de support adapté à la criticité.
- Documenter les IDs de souscription/compte, régions et ressources.
- Conserver un template de ticket P1.
- Savoir quelles métriques/logs joindre.
- Connaître les limites de responsabilité : requête SQL lente vs panne de plateforme.
- Tester l’escalade avant une crise majeure.
Incident P1 template - Resource / Region / AZ: - Start time UTC: - Business impact: - Endpoint and engine version: - HA mode: - Recent changes: - Metrics screenshots/exports: - PostgreSQL errors: - Reproduction: - Mitigation attempted: - Requested provider action:
| Poste | Azure/AWS PaaS |
|---|---|
| Compute primaire | SKU/classe et durée |
| HA | Standby ou nœuds supplémentaires |
| Read replicas | Compute + stockage par replica |
| Stockage | Go/GiB provisionnés + tier/IOPS |
| Backups | Part gratuite éventuelle puis dépassement, copies régionales |
| Réseau | Inter-AZ/inter-région/egress selon flux |
| Monitoring | Logs, métriques avancées, rétention |
| KMS/Key Vault/Secrets | Opérations et stockage selon services |
| Support | Plan de support |
| Migration/DR | Environnements temporaires, DMS, data transfer |
| Poste | Souvent oublié |
|---|---|
| VM primaire/standbys/DCS/proxy | Toute la topologie, pas une seule VM |
| Stockage et snapshots | Volumes, IOPS, copies, repository backup |
| Licences/outils | Monitoring, backup, sécurité éventuels |
| Temps humain | DBA, Linux, SRE, astreinte, patching |
| Outages | Temps de résolution et impact métier |
| Dette plateforme | Mises à niveau, automation, docs |
| Capacité de secours | Standbys et région DR sous-utilisés |
| Audit/compliance | Preuves, scans, remédiation |
# Exemple pédagogique annuel en euros — valeurs fictives PaaS: compute + HA 42 000 € storage/backups 12 000 € monitoring/network 6 000 € support 8 000 € effort humain 35 000 € TOTAL 103 000 € VM auto-gérée: VMs + storage 34 000 € backup/monitoring 9 000 € effort humain 75 000 € astreinte/incidents 20 000 € TOTAL 138 000 € # Le résultat peut s’inverser à très grande échelle ou avec une plateforme interne mature.
Les montants sont uniquement illustratifs. Utilisez vos tarifs, salaires chargés, niveau de support, coûts d’incident et taux d’utilisation réels.
- Right-size par métriques p95/p99, pas par intuition.
- Réduire le nombre de replicas inutilisées.
- Réserver/engager la capacité stable selon offres cloud.
- Piloter logs et rétention.
- Éviter le surdimensionnement de stockage irréversible.
- Traiter bloat, indexes inutiles et WAL excessif.
- Séparer workloads critiques et non critiques.
- Arrêter ou réduire dev/test lorsque possible.
- Attribuer coût par application/tenant.
Azure
- Azure Policy
- RBAC/PIM
- Management Locks
- Defender for Cloud
- Diagnostic settings
- Resource Graph
- Key Vault
AWS
- AWS Config
- IAM/SCP
- CloudTrail
- Security Hub
- Deletion protection
- KMS
- Secrets Manager
- Rôles et grants versionnés.
- Séparation owner/runtime/read-only.
- Audit des connexions et DDL selon mécanismes supportés.
- Rétention des logs conforme et maîtrisée.
- Revue périodique des comptes inactifs.
- Rotation des secrets et certificats.
- Masquage/anonymisation des clones non production.
- Classification des données et règles d’export.
| Preuve | Fréquence |
|---|---|
| Configuration réseau privé | À chaque changement |
| Liste rôles/grants | Mensuel ou trimestriel |
| Test PITR et RTO | Trimestriel |
| Test failover/DR | Semestriel ou annuel |
| Rapport versions/extensions | Mensuel |
| Patching/maintenance history | Continu |
| Alertes critiques testées | Trimestriel |
| Clés et rotation | Selon politique |
| Exceptions publiques | Revue mensuelle |
| Coûts et capacité | Mensuel |
Une certification du fournisseur couvre son périmètre et ses contrôles. Elle ne certifie ni votre schéma de droits, ni votre application, ni vos exports, ni votre usage des comptes administrateurs.
La conformité est une chaîne. Le PaaS réduit la quantité de contrôles d’infrastructure à produire, mais les contrôles de données, d’identité, de réseau, de journalisation et de reprise restent à votre charge.
- Installation du moteur et du système.
- Patching Linux et remplacement d’hôte.
- Construction manuelle des backups physiques.
- Orchestration HA de base.
- Gestion des services systemd et du filesystem.
- Maintenance des agents de monitoring hôte.
- Architecture des rôles et privilèges.
- Tuning SQL et plans d’exécution.
- Capacity planning et FinOps.
- Qualification des limites par version/SKU/région.
- Tests de restauration, failover et DR.
- Automatisation IaC et policy as code.
- Conseil aux développeurs et gouvernance des migrations.
- Observabilité orientée métier.
DBA moteur
- SQL
- Plans
- Vacuum
- Locks
- Extensions
DBA cloud
- IaC
- IAM/RBAC
- Network/DNS
- KMS/Key Vault
- Cost
DBRE
- SLO
- Automation
- Game days
- Incident response
- Capacity
Le rôle évolue vers Database Reliability Engineering : fiabilité, automatisation, performance, coûts et design des données. Le DBA n’est plus propriétaire du Linux, mais reste responsable du comportement de la base pour l’entreprise.
| Décision | Conséquence |
|---|---|
| “Le cloud gère tout, plus besoin de DBA” | SQL lent, droits excessifs, backups jamais testés |
| “Le DBA doit tout contrôler comme sur VM” | Blocage de l’adoption et sur-complexité |
| “DevOps seul sans expertise DB” | Moteur traité comme un simple container |
| “DBA isolé des développeurs” | Problèmes SQL découverts trop tard |
| “Chaque équipe crée son RDS/Azure librement” | Dérive, coûts, sécurité et versions incohérents |
Une petite équipe plateforme fournit le cadre PaaS ; le DBA/DBRE gouverne le moteur et la donnée ; les équipes applicatives restent propriétaires de leurs requêtes et migrations.
| Critère | Poids suggéré | PaaS favorisé si… | VM favorisée si… |
|---|---|---|---|
| Accès OS requis | 10 | Non | Oui, démontré |
| Extension custom | 10 | Non | Oui |
| Charge ops disponible | 9 | Faible | Équipe mature 24/7 |
| Time-to-market | 8 | Court | Secondaire |
| Standardisation | 8 | Prioritaire | Custom requis |
| Tuning système | 7 | Standard suffit | Déterminant |
| DR multi-région | 7 | Briques cloud souhaitées | Topologie custom |
| Coût humain | 7 | À réduire | Déjà amorti |
| Portabilité | 6 | SQL suffit | Infrastructure portable exigée |
| Conformité | 6 | Contrôles cloud utiles | Contrôle local exigé |
Score = Σ (poids × note 0..5) Exemple: - PaaS gagne 310 points - VM gagne 190 points La décision doit encore passer les critères éliminatoires : root obligatoire, extension non supportée, version indisponible, topologie impossible.
- Extension native non supportée et non remplaçable.
- Accès obligatoire au filesystem ou à l’OS.
- Version PostgreSQL non disponible dans la fenêtre projet.
- Topologie de réplication incompatible.
- Exigence de stockage/tablespace physique.
- RPO/RTO non satisfaisable par les options disponibles.
- Région ou certification indisponible.
- Limite de taille, connexions ou IOPS incompatible.
| Workload | Azure/AWS PaaS | VM |
|---|---|---|
| ERP/web standard | Très favorable | Possible mais plus d’ops |
| Microservices | Favorable avec pooling et gouvernance | Possible avec plateforme solide |
| BI/reporting | Favorable avec replicas dédiées | Favorable si stockage custom requis |
| Geospatial PostGIS | Favorable si version extension supportée | VM si modules spécifiques |
| Timeseries | Étudier extension et coûts | VM si tuning/extension avancés |
| CDC intensif | Possible mais tester slots/failover | Plus de contrôle |
| Très faible latence NVMe locale | Moins naturel | VM/bare metal |
| Base embarquée dans appliance | Non naturel | VM/serveur |
| Réglementé standard | Souvent favorable | Si souveraineté locale imposée |
| R&D PostgreSQL custom | Défavorable | Très favorable |
Pour la majorité des applications d’entreprise, le PaaS est le choix par défaut. La VM devient une exception justifiée par une exigence technique, réglementaire ou économique documentée — pas par préférence culturelle.
- Zone-redundant HA pour criticité élevée.
- PgBouncer intégré ou pool applicatif maîtrisé.
- Diagnostic settings exportés vers Log Analytics.
- Geo replica ou geo-backup selon RPO/RTO.
- Resource lock, policy, tags, budget et CMK si requis.
- Choisir explicitement Multi-AZ DB instance ou Multi-AZ DB cluster.
- RDS Proxy pour workloads à forte création de connexions.
- Cross-region replica ou backup copy selon RPO/RTO.
- Parameter groups versionnés.
- Deletion protection, snapshot final et Config/CloudTrail.
- Au moins trois nœuds DCS ou service de quorum fiable.
- Fencing explicite.
- Backups indépendants de la réplication.
- Runbooks de switchover, failover, rejoin et rebuild.
- Patch management Linux/PostgreSQL automatisé.
Un choix peut être hybride : PaaS pour la majorité des bases standards et plateforme VM pour les quelques workloads incompatibles. Cette stratégie évite de construire une plateforme complexe pour 100 % des bases à cause de 5 % de cas particuliers.
| Catalogue | Traitement |
|---|---|
| Tier A standard critique | PaaS HA + DR + gouvernance forte |
| Tier B standard | PaaS sans option excessive |
| Tier C dev/test | PaaS économique ou mutualisation |
| Exception extension custom | VM database platform |
| R&D moteur | VM/bare metal isolé |
- Version et minor actuelles.
- Taille data/index/WAL et croissance.
- Extensions et versions.
- Paramètres non défaut.
- Tablespaces et chemins.
- Réplication physique/logique.
- FDW, dblink, jobs, fichiers, scripts OS.
- Pic de connexions et pool.
- RPO/RTO et criticité.
- Drivers, TLS et authentification.
- Équipe et astreinte disponibles.
- Fréquence incidents et changements.
- Processus backup/restore actuel.
- Maintenance windows acceptables.
- Niveau de support cloud.
- Observabilité et SLO.
- Procédures de failover/DR.
- Compétences IaC et réseau.
- Politique de patching et upgrades.
- Région et résidence des données.
- Exigence de clé gérée client.
- Réseau public interdit ?
- Identité fédérée requise ?
- Audit DDL/connexion.
- Immutabilité backup.
- PIM/MFA/break-glass.
- Masquage non-prod.
- Rétention légale.
- Exigence d’accès OS ou agent.
| Résultat | Décision |
|---|---|
| Aucun blocage, workload standard | Go PaaS |
| Quelques écarts remplaçables | Go avec plan de remédiation |
| Extension/OS critique non supporté | No-Go PaaS classique |
| RPO/RTO non démontré | POC et game day avant Go |
| Coût PaaS élevé mais ops faibles | Comparer TCO complet |
| Équipe VM mature et parc massif | Étude économique approfondie |
| Exigences non documentées | Suspendre la décision |
Avec Azure Database for PostgreSQL ou AWS RDS, on délègue surtout la mécanique : provisioning, sauvegardes, PITR, patchs, monitoring et haute disponibilité. On gagne du temps et de la standardisation, mais on perd root, le filesystem, le vrai SUPERUSER et une partie des paramètres, extensions et topologies. Sur VM, on récupère toute la liberté, mais aussi tous les backups, la HA, la sécurité, les patches et l’astreinte. Le DBA reste indispensable pour le SQL, les données, la capacité, les coûts et la reprise.
Le PaaS ne supprime pas PostgreSQL : il supprime surtout une partie de la plateforme autour. Azure et AWS prennent en charge l’hôte, l’installation, les backups physiques, le PITR, le remplacement de nœud, les options HA, les patchs de plateforme et les métriques. Cela réduit fortement le travail répétitif et le risque de construire soi-même une orchestration fragile.
En échange, le fournisseur garde le contrôle ultime. On ne se connecte pas en root, on ne voit pas PGDATA, on ne dispose pas du vrai superuser, et l’on dépend d’un catalogue de versions, paramètres, extensions et tailles. Certaines réplications avancées, tablespaces, modules natifs ou diagnostics bas niveau deviennent impossibles.
Le bon choix dépend donc du workload. Pour une application métier standard, le PaaS est souvent le meilleur défaut. Pour un PostgreSQL custom, une extension interne, un besoin de kernel/filesystem ou une topologie très particulière, la VM reste justifiée. Dans les deux cas, le DBA garde la responsabilité des requêtes, index, transactions, rôles, capacité, coûts, migrations et tests de reprise.
| Angle | Message |
|---|---|
| Business | Réduction du délai de livraison et de la charge d’astreinte |
| Risque | Moins d’erreurs de plateforme, mais dépendance au contrat du service |
| Finance | Facture plus visible, TCO souvent meilleur à petite/moyenne échelle |
| Technique | Standardisation contre liberté système |
| Organisation | Le DBA devient DBRE/cloud DBA, il ne disparaît pas |
| Décision | PaaS par défaut, VM sur exception documentée |
| PaaS — Gains | PaaS — Pertes |
|---|---|
| Provisioning rapide | Pas de root/SSH |
| Backups + PITR intégrés | Pas de PGDATA |
| HA orchestrée | Pas de vrai SUPERUSER |
| Patching plateforme | Paramètres limités |
| Monitoring natif | Extensions cataloguées |
| Réseau/identité cloud | Topologies avancées encadrées |
| Scaling simplifié | Maintenance dans le cadre fournisseur |
| Moins d’astreinte système | Dépendance service/région/SKU |
-- Sessions actives
SELECT pid, usename, state, wait_event_type, wait_event,
now() - query_start AS age, left(query, 150)
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY query_start;
-- Verrous bloquants
SELECT blocked.pid AS blocked_pid,
blocker.pid AS blocker_pid,
blocked.query AS blocked_query,
blocker.query AS blocker_query
FROM pg_stat_activity blocked
JOIN pg_locks bl ON bl.pid = blocked.pid AND NOT bl.granted
JOIN pg_locks kl ON kl.locktype = bl.locktype
AND kl.database IS NOT DISTINCT FROM bl.database
AND kl.relation IS NOT DISTINCT FROM bl.relation
AND kl.page IS NOT DISTINCT FROM bl.page
AND kl.tuple IS NOT DISTINCT FROM bl.tuple
AND kl.transactionid IS NOT DISTINCT FROM bl.transactionid
AND kl.classid IS NOT DISTINCT FROM bl.classid
AND kl.objid IS NOT DISTINCT FROM bl.objid
AND kl.objsubid IS NOT DISTINCT FROM bl.objsubid
AND kl.granted
JOIN pg_stat_activity blocker ON blocker.pid = kl.pid;
-- Taille et bloat indicatif
SELECT schemaname, relname, n_live_tup, n_dead_tup,
last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 20;- Aucun test PITR.
- Compte admin dans l’application.
- Base publique sur Internet sans justification.
- Extension non vérifiée avant migration.
- max_connections augmenté sans modèle mémoire.
- Replica utilisée comme backup.
- Logical slot sans monitoring.
- HA activée mais failover jamais testé.
- Autoscaling stockage sans plafond ni alerte.
- Upgrade majeur sans rollback.
- Pas de propriétaire DBA/DBRE.
- Comparaison de coût basée sur une seule VM.
PaaS par défaut si: - PostgreSQL standard - extensions supportées - pas de root/filesystem requis - besoin de réduire l’exploitation - réseau/identité cloud utiles VM si: - extension/build custom - accès OS/PGDATA obligatoire - tuning kernel/storage déterminant - topologie de réplication spécifique - plateforme DBA/SRE déjà mature
Le guide est rédigé à partir des documentations officielles consultées en juillet 2026. Les versions PostgreSQL disponibles, les extensions, les limites, les régions, les classes d’instances et les fonctions preview évoluent. Revalidez toujours le couple région + version + SKU/topologie avant une décision.
