Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026
Ideo-Lab • Guide expert • Thème clair

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 ?

Photographie documentaire : juillet 2026 — toujours revalider région, version, extension, SKU et topologie.

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.

Gain majeurTemps d’exploitationMoins de mécanique Linux, backup et HA
Perte majeureContrôle systèmePas de root, PGDATA ou superuser réel
Choix par défautPaaS standardPour la majorité des workloads métier
ExceptionVM justifiéeCustom, OS, extension ou topologie
DBAToujours nécessaireSQL, capacité, coûts, sécurité, reprise
1

La grande question

Ce que le PaaS change réellement — et ce qu’il ne change pas.

SynthèseTrade-offArchitecture
2

Responsabilité partagée

Qui fait quoi entre Azure/AWS et votre équipe.

RACIOpsGouvernance
3

Ce qu’implique réellement une VM

Derrière “on installe PostgreSQL”, toute une plateforme existe.

LinuxPatroniBackups
4

Azure Database for PostgreSQL

Ce que Flexible Server fournit et comment le penser.

AzureFlexible ServerEntra
5

Amazon RDS for PostgreSQL

Ce que RDS apporte, et ce qu’il ne faut pas confondre avec Aurora.

AWSRDS PostgreSQLIAM
6

Provisioning et Infrastructure as Code

Le gain n’est pas le clic : c’est la reproductibilité.

TerraformBicepCloudFormation
7

Backups, PITR et restauration

Le service sauvegarde ; vous devez prouver la récupération.

PITRRPORestore
8

Haute disponibilité et failover

HA managée, HA autogérée et comportement applicatif.

Multi-AZZone RedundantFailover
9

Read replicas et scaling lecture

Une replica n’est ni un backup ni une garantie de cohérence.

Read scalingLagReporting
10

Disaster Recovery inter-région

Région perdue, données corrompues ou erreur humaine : scénarios distincts.

DRCross-regionRPO/RTO
11

Réseau, identité et chiffrement

Le PaaS fournit les briques ; la sécurité logique reste à construire.

Private networkingEntra/IAMKMS
12

SUPERUSER, OS et filesystem

La perte de contrôle la plus visible — et parfois la plus mal comprise.

SUPERUSERRootPGDATA
13

Paramètres, extensions et tablespaces

Le cœur de l’étude de compatibilité.

ParametersExtensionsTablespaces
14

Scaling compute, mémoire et stockage

Simple ne signifie pas instantané ni réversible.

Scale upStorageAutoscaling
15

Performance et tuning PostgreSQL

Le PaaS ne rend pas une mauvaise requête rapide.

SQLAutovacuumIOPS
16

Connexions, pooling et résilience client

Le plus petit détail qui fait tomber les plus grandes architectures.

PgBouncerRDS ProxyPooling
17

Monitoring, logs et observabilité

Voir le service, le moteur et le métier dans la même chronologie.

MetricsLogsSLO
18

Patching et maintenance

Automatisé ne veut pas dire sans interruption ni sans validation.

Minor versionsWindowPatching
19

Upgrades majeurs PostgreSQL

Le fournisseur orchestre ; la compatibilité reste votre problème.

PG majorPrecheckRollback
20

Réplication avancée, CDC et intégrations

Ce qui reste possible, ce qui devient fragile.

Logical replicationCDCSlots
21

Migration vers Azure ou AWS

Découvrir les incompatibilités avant le week-end de bascule.

AssessmentCutoverRollback
22

Diagnostic et gestion d’incident

Comment travailler sans root ni accès direct à l’hôte.

TroubleshootingSupportRunbooks
23

Coûts et FinOps

Comparer la facture cloud au coût complet, pas à une VM nue.

TCOFinOps
24

Gouvernance, conformité et audit

Le service aide à produire des preuves, mais ne garantit pas votre conformité.

PolicyAuditCompliance
25

Le DBA dans un monde PaaS

Moins de système, davantage d’ingénierie de la donnée.

DBAPlatformData
26

Matrice de décision

Transformer les préférences en critères mesurables.

ScoringWorkloadsDecision
27

Architectures de référence

Trois modèles concrets pour la production.

BlueprintAzureAWS
28

Checklist d’évaluation

Le questionnaire avant toute décision ou migration.

ChecklistAssessmentGo/No-Go
29

Expliquer la différence simplement

Réponses courtes, moyennes et expertes pour entretien ou comité.

EntretienExecutiveExpert
30

Cheat-sheet

Résumé opérationnel à conserver.

RésuméCommandsRed flags
31

Références officielles

Documentation à revalider selon région, version et date.

Microsoft LearnAWS DocsPostgreSQL
1. La grande question
Réponse en une phrase
Azure 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.
Conclusion architecturale
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.
DimensionAzure / AWS PaaSPostgreSQL sur VM / LinuxQuestion à poser
Temps de mise en serviceMinutes à heuresHeures à jours selon industrialisationLe délai de livraison est-il critique ?
Charge récurrenteFaible à moyenneMoyenne à très forteQui assure les patchs, backups, HA et astreintes ?
Contrôle systèmeFaibleTotalAvez-vous un besoin prouvé de root/PGDATA/kernel ?
StandardisationTrès forteDépend de votre plateformeSouhaitez-vous imposer une landing zone commune ?
Liberté PostgreSQLEncadréeQuasi totaleUtilisez-vous des extensions, builds ou paramètres rares ?
RéversibilitéBonne au niveau SQL, plus complexe au niveau serviceBonne si formats standardsDisposez-vous d’un plan de sortie testé ?
Responsabilité des incidentsPartagéeQuasi entièrement interneVotre équipe peut-elle diagnostiquer 24/7 ?
Optimisation extrêmeLimitée par le serviceMaximaleLe gain attendu justifie-t-il l’exploitation supplémentaire ?
Le continuum de responsabilité
SaaS DBTrès peu de contrôle
PaaS PostgreSQLContrôle SQL et données
VM PostgreSQLContrôle OS + moteur
Bare metalContrôle matériel
Plus on va vers la droite, plus la liberté augmente — et plus le coût opérationnel remonte.
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.

Erreur de gouvernance
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 besoinChoix naturelPourquoi
Application métier standard, équipe réduitePaaSLa valeur est dans l’application, pas dans la construction de la plateforme DB.
SaaS multi-tenant avec besoin d’élasticité et gouvernancePaaSAutomatisation, APIs, métriques, déploiement homogène.
Extension non supportée ou module natif interneVMLe catalogue PaaS devient un blocage structurel.
Besoin de root, eBPF, filesystem ou build PostgreSQL customVMExigence incompatible avec le contrat managé classique.
Environnement réglementé mais standardSouvent PaaSLe PaaS apporte chiffrement, journalisation et gouvernance, à compléter par des contrôles clients.
Plateforme interne avec équipe SRE/DBA mature et forte automatisationVM ou PaaS selon workloadLa décision devient économique et fonctionnelle, pas seulement opérationnelle.
Très petites bases non critiquesPaaS burstable ou VM mutualiséeComparer le coût complet, pas seulement la facture du service.
2. Responsabilité partagée
ActivitéAzure / AWSClient DBA / DevOpsSur VM auto-gérée
Matériel, hyperviseur, remplacement hôteFournisseurSupervision du serviceClient / hébergeur
Système Linux hôteFournisseurAucun accèsClient
Installation PostgreSQLFournisseurChoix version/SKUClient
Patches OSFournisseurPlanification et validation applicativeClient
Patches mineurs PostgreSQLFournisseur dans le cadre du serviceTests, maintenance, compatibilitéClient
Upgrade majeurOrchestré mais déclenché/planifié selon servicePréchecks, tests, rollbackClient de bout en bout
Backups physiques/PITRFournisseurRétention, tests, procédureClient
Sauvegardes logiques/exportPartiellementClientClient
HA intra-régionFournisseur si option activéeArchitecture app, testsClient construit Patroni/repmgr/etc.
DR inter-régionBriques fourniesDesign, runbook, décision de basculeClient
Réseau privéBrique cloudDNS, routes, règles, architectureClient
Rôles SQL et privilègesNonClientClient
Index, statistiques, autovacuumNonClientClient
SQL applicatif et transactionsNonClientClient
Coûts et capacitéTarification et métriquesClientClient
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.

Principe
Le PaaS supprime des tâches, mais transforme plusieurs responsabilités techniques en responsabilités de configuration, validation et gouvernance.
SujetCloud PlatformDBA PostgreSQLDevOps/SREDéveloppeurSécurité
Création ressourceA/CCRIC
Paramètres PostgreSQLIR/ACCI
Réseau privé/DNSCCR/AIC
Rôles et grantsIR/ACCC
PITR trimestrielCRAIC
Failover game dayCRACI
Tuning SQLIRCA/RI
Gestion des coûtsCRAII
Incident P1CRACC

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
3. Ce qu’implique réellement une VM
PostgreSQL autogéré n’est pas un seul service
Matériel/VMCPU, RAM, réseau
LinuxKernel, FS, packages
PostgreSQLBinaries, config, extensions
HADCS, fencing, VIP/DNS
BackupBase backup + WAL
ObservabilitéLogs, metrics, traces
Chaque couche possède son cycle de vie, ses pannes et son astreinte.
CoucheÀ construireÀ maintenirRisque classique
LinuxImage, durcissement, users, sudo, time syncPatches, CVE, capacité disqueDérive de configuration
StockageVolumes, filesystem, mount, IOPSExpansion, latence, corruptionDisque plein ou mauvais montage
PostgreSQLPackages/build, cluster, paramètresMineurs, majeurs, extensionsConfiguration incohérente
HAPatroni/repmgr/pg_auto_failover, etcd/ConsulQuorum, fencing, failoverSplit-brain
BackupspgBackRest/Barman, repository, WAL archiveRétention, vérification, restoresBackup présent mais inutilisable
Monitoringpostgres_exporter, node exporter, logsDashboards, alertes, cardinalitéIncident vu trop tard
SécuritéFirewall, TLS, secrets, auditRotation, patching, revue droitsCompte 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 ?
Point critique
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.
BriqueDécision nécessaireTest indispensable
Full/base backupFréquence, compression, repositoryRestore complet sur hôte vierge
Archivage WALDurabilité, latence, monitoringPITR à un timestamp arbitraire
RétentionJour/semaine/mois, légaleSuppression sans casser la chaîne
ChiffrementAt rest et in transitRécupération des clés
ImmutabilitéWORM/object lock/offlineRésistance à un compte compromis
CatalogueMetadata et inventaireRecherche d’un point restaurable
DRCopie hors site/régionRestauration 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.
Règle de décision
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.
4. Azure Database for PostgreSQL

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.

Vue logique Azure
ApplicationApp Service / AKS / VM
Réseau privéVNet / Private Link / DNS
Flexible ServerPostgreSQL managé
Standby HAMême zone ou autre zone
BackupsSnapshots + WAL
ObservabilitéAzure Monitor / Logs
À retenir
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
SujetComportement AzureConséquence
OS / SSHNon accessiblePas d’agent ni tuning kernel
SUPERUSERRéservé au serviceazure_pg_admin n’est pas un superuser complet
ExtensionsSous-ensemble supporté + allowlistValidation obligatoire avant migration
Backups physiquesGérés et non exportablesUtiliser pg_dump/pg_restore pour la portabilité
PITRCrée un nouveau serveurPrévoir DNS, validation et cutover
Storage downsizeNon supporté directementDump/restore vers un nouveau serveur
Read replicasAsynchrones, jusqu’à cinq selon documentation actuelleLag à mesurer, pas de lecture fortement cohérente
Standby HANon lisibleHA ≠ 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.
5. Amazon RDS for PostgreSQL

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.

Vue logique AWS RDS
ApplicationEC2 / ECS / EKS / Lambda
RéseauVPC / Subnets / SG
RDS PostgreSQLWriter ou instance
Multi-AZ1 standby ou cluster
BackupsSnapshots + logs
ObservabilitéCloudWatch / DB Insights
ModeTopologieLecture sur standbyUsage
Multi-AZ DB instance1 primaire + 1 standbyNonHaute disponibilité classique
Multi-AZ DB cluster1 writer + 2 readers dans 3 AZOuiHA + capacité de lecture
Read replicaReplica asynchrone indépendanteOuiRead scaling, DR, reporting
Single-AZUne instanceNonDev/test ou faible criticité
Confusion fréquente
“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
SujetComportement RDSConséquence
Host OSNon accessiblePas de root, package OS ou agent arbitraire
SUPERUSERrds_superuser seulementCertaines tâches nécessitent procédures/rôles AWS
Parameter groupsSous-ensemble dynamique/statiqueReboot pour les paramètres statiques
ExtensionsCatalogue par versionImpossible de compiler librement un module
TablespacesCompatibilité logique, volume uniquePas de séparation I/O par tablespace
Backups auto0–35 jours sur instance, 1–35 sur cluster Multi-AZLe choix de rétention fait partie du design
IAM authToken court, contraintes spécifiquesNe remplace pas toujours les mots de passe
Read replicasAsynchronesLag et promotion à orchestrer
6. Provisioning et Infrastructure as Code
ÉtapePaaS Azure/AWSVM autogérée
ComputeSKU/classe sélectionnéeCréer VM, image, CPU/RAM, anti-affinité
StockageParamètres du serviceCréer/attacher/formater/monter volumes
PostgreSQLMoteur provisionnéInstaller packages, initdb, config
BackupsOption et rétentionInstaller outil, repository, WAL archive
HAOption de déploiementInstaller replicas, DCS, fencing, endpoint
MonitoringMétriques/logs natifsInstaller exporters, agents, dashboards
SécuritéRéseau/identité/KMS/Key VaultDurcir OS, firewall, TLS, secrets
Délai réalisteMinutes à heuresHeures à 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 obligatoirePourquoi
Réseau privé par défautÉviter l’exposition publique accidentelle
Chiffrement et clé définieÉviter une ressource non conforme
Backup retention minimaleGarantir un plancher de récupération
Protection contre suppressionRéduire les erreurs humaines
Logs/metrics/alertsÉviter les bases invisibles
Tags propriétaire/coût/criticitéFaciliter gouvernance et FinOps
Fenêtre de maintenanceRendre les changements prévisibles
Version et extensions déclaréesÉviter la dérive
Test automatisé de connexionValider réseau et authentification
Runbook associéRelier ressource et exploitation
7. Backups, PITR et restauration
  • 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.
Conséquence
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.
Attention
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
TestFréquence recommandéeCritère de réussite
PITR techniqueMensuel ou trimestrielServeur restauré au timestamp demandé
Restauration applicativeTrimestrielApplication connectée et contrôles métier OK
Restauration régionaleSemestrielRéseau, secrets et DNS reconstruits
Suppression accidentelleGame dayÉquipe retrouve la bonne transaction
Compte cloud compromisAnnuelBackups protégés/immuables selon design
Mesure RTOÀ chaque testDurée mesurée, pas estimée
Mesure RPOÀ chaque testPerte maximale documentée
Règle
Un backup n’existe pas opérationnellement tant qu’une restauration complète et chronométrée n’a pas été réussie.
8. Haute disponibilité et failover
ModeProtectionRéplicationLecture standbyFailover
Sans HARésilience du nœud/stockage gérée mais pas de standby dédiéN/ANonRedémarrage/relocalisation du service
Same-zone HAPanne de nœud dans la zoneSynchroneNonAutomatique
Zone-redundant HAPanne de nœud et de zoneSynchroneNonAutomatique, 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.

ModeTopologieLectureCaractéristique
Multi-AZ DB instanceWriter + standbyStandby non lisibleHA classique avec endpoint stable
Multi-AZ DB clusterWriter + 2 readers dans 3 AZReaders lisiblesHA et read capacity
Read replicaReplica asynchroneOuiScaling/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é.

Chaîne HA auto-gérée
PrimaryWrites
Standby 1Sync/async
Standby 2Async/DR
DCSetcd/Consul
PatroniElection et orchestration
Proxy/DNSEndpoint applicatif
Le fencing et le quorum sont les éléments les plus critiques.
  • 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.
Vérité opérationnelle
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.
9. Read replicas et scaling lecture
  • 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ègeEffetContrôle
LagLecture ancienneMesurer lag en secondes et bytes
Longue requête sur replicaConflits/recovery delayLimiter durée et adapter paramètres exposés
Reporting lourdI/O et réseau saturésReplica dédiée et fenêtres
Lecture après écritureIncohérence fonctionnelleSticky reads ou lecture primaire
Replica considérée comme backupErreur logique propagéeBackups/PITR indépendants
Promotion non préparéeDNS/secrets/roles non prêtsRunbook et test
Coût ignoréDoublement compute + stockageFinOps 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)
10. Disaster Recovery inter-région
ScénarioMécanisme principalPourquoi
Panne d’instance/nœudHA intra-régionBascule rapide, zéro ou faible perte
Panne de zoneZone-redundant / Multi-AZProtection zonale
Panne de régionGeo replica / cross-region replica / backup distantReconstruction dans une autre région
Suppression logiquePITRUne replica reproduit l’erreur
Corruption applicative lenteDelayed replica ou backup historiqueBesoin d’un point antérieur
Compromission compte cloudBackup 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.
  1. Déclarer la région primaire indisponible selon des critères objectifs.
  2. Geler les écritures si un risque de double writer existe.
  3. Promouvoir/restaurer la cible DR.
  4. Appliquer paramètres, extensions, rôles, secrets et intégrations.
  5. Basculer DNS/endpoints et valider propagation.
  6. Exécuter contrôles fonctionnels et réconciliation.
  7. Communiquer RPO réel et données potentiellement absentes.
  8. Préparer la stratégie de retour vers la région d’origine.
Erreur fréquente
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.
11. Réseau, identité et chiffrement
  • 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.
Point DNS
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.
CompteUsage recommandéInterdit
Admin PaaSBootstrap, rôles, opérations raresConnexion applicative quotidienne
Owner de schémaMigrations contrôléesExécution runtime de l’application
Compte applicatifCRUD strictement nécessaireCREATE EXTENSION, role admin, ownership global
Compte lectureReporting/BIÉcriture ou DDL
Compte supportDiagnostic limité et temporairePrivilèges permanents élevés
Break-glassIncident majeur, MFA, auditUsage 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;
MenaceProtection fournisseurProtection client
Disque voléChiffrement at restChoix clés/rotation et droits KMS/Key Vault
Accès InternetBriques réseau privéArchitecture DNS/routes/firewall
Injection SQLAucuneParamétrage, requêtes préparées, moindre privilège
Compte admin compromisIAM/RBAC/MFA disponiblesPIM, break-glass, audit, séparation
Secret dans GitAucuneScanner, vault, rotation
Export de donnéesLogs/contrôles partielsDLP, grants, audit, réseau egress
Suppression ressourceProtection optionnelleLocks, deletion protection, policy
Ransomware cloudBackups gérésIsolation, immutabilité, comptes séparés
12. SUPERUSER, OS et filesystem

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.
BesoinImpact PaaSAlternative éventuelle
Compiler une extension C interneBloquéVM, service custom, fonctionnalité applicative
Modifier kernel/THP/NUMABloquéChoix de SKU, VM
Accéder aux datafilesBloquéSQL, vues, logs exposés, support fournisseur
Créer un tablespace sur un volume distinctBloqué ou sans effet physiquePartitionnement, service séparé, VM
strace/perf/eBPFBloquéMétriques fournisseur, support, reproduction sur VM
Agent antivirus/EDR localBloquéContrôles du service et réseau
Manipulation pg_hba.conf fineEncadrée par serviceFirewall + rôles + SSL
Custom PostgreSQL buildBloqué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.
Bonne discipline
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.
13. Paramètres, extensions et tablespaces
CatégorieAzureAWS RDSVM
Paramètres dynamiquesSous-ensemble exposéCustom parameter group ou SQLLibres selon PostgreSQL
Paramètres statiquesRestart géré requisReboot requisRestart/reload contrôlé
Superuser-onlySouvent non modifiablesSouvent non modifiablesModifiables
shared_preload_librariesListe encadréeListe encadrée par extensions/modulesLibre
Kernel/filesystemNonNonOui
Build-time optionsNonNonOui
Méthode
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.
ÉtapeAzureAWS RDS
DisponibilitéListe par nom/versionListe par moteur/version
ActivationAllowlist via azure.extensions puis CREATE EXTENSIONCREATE EXTENSION selon droits et rds.allowed_extensions éventuel
Trusted extensionsSelon support AzureInstallables par rôles autorisés sur versions récentes selon documentation
Background workerConsidérations shared_preload_librariesParamètres et support RDS
Upgrade extensionVersion fournie par AzureVersion fournie par RDS
Extension customNonNon
  1. Inventorier extname/extversion.
  2. Vérifier version cible exacte.
  3. Tester CREATE/ALTER EXTENSION.
  4. Identifier shared_preload_libraries.
  5. Vérifier droits superuser et dépendances OS.
  6. 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;
14. Scaling compute, mémoire et stockage
ActionAzureAWS RDSVM
Augmenter CPU/RAMModifier SKU/tier, opération géréeModifier instance classResize VM ou migration
Réduire CPU/RAMPossible selon contraintes et downtimePossible selon classe et contraintesPossible mais risque capacité
ImpactRestart/failover ou near-zero downtime selon mode actuelReboot/failover selon topologieRestart ou migration
ValidationConnexions, mémoire, HA, coûtsParameter group, IOPS, failoverKernel, 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.

SujetAzureAWS RDSVM
CroissanceScale up encadré, incréments et restart possibles selon serviceAugmentation + storage autoscaling optionnelExtension volume/filesystem manuelle
DiminutionNon directe, nouveau serveur + migrationGénéralement non directe, nouvelle instance/migrationPossible mais risquée et rarement en ligne
IOPSDépend tier/type/taillegp3/io1/io2 et paramètresVolume/EBS/NVMe/filesystem libres
Disque pleinMétriques et mécanismes du serviceStorage autoscaling si configuréAstreinte et procédure interne
Multi-volumeAbstraitVolume logique serviceLibre
  • 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.
Piège FinOps
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
IndicateurSeuil d’attentionAction
CPU p95> 70–80 % prolongéAnalyser waits/SQL avant scale
Mémoireswap/evictions ou cache insuffisantRéduire connexions, scale mémoire
Storage free< 20 % ou délai court avant saturationNettoyer/augmenter
IO latencyHausse durablePlans, checkpoints, storage tier
Replica lagCroissance continueCapacité réseau/IO/queries
Connections waitingNon nul durablePool, max, transaction length
15. Performance et tuning PostgreSQL
  • 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.
Limite
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.
DomaineTravail DBA
Plans d’exécutionEXPLAIN (ANALYZE, BUFFERS, WAL), estimation cardinalité
IndexChoix, ordre, partial, covering, doublons, bloat
SQLJoins, sous-requêtes, agrégations, pagination, batch
AutovacuumSeuils par table, freeze, dead tuples, workers
Statistiquesdefault_statistics_target, extended stats, ANALYZE
ConnexionsPool, transaction mode, sessions longues
VerrousTransactions, DDL, deadlocks, lock chains
Mémoirework_mem par opération, maintenance_work_mem, cache
Checkpoint/WALVolume WAL, checkpoint pressure, replication slots
PartitionnementPruning, 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
  1. Qualifier le symptôme : latence, throughput, timeout, CPU, I/O, lock ou connexion.
  2. Comparer période saine et période lente.
  3. Identifier les waits dominants et les top SQL.
  4. Vérifier saturation CPU/mémoire/IOPS/connexions.
  5. Analyser plans et volumes réellement lus.
  6. Contrôler autovacuum, bloat, checkpoints et WAL.
  7. Valider une hypothèse avec test reproductible.
  8. 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;
16. Connexions, pooling et résilience client
  • 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.

FonctionCompatible transaction pooling ?Commentaire
Transactions classiquesOuiConnexion serveur attribuée pendant la transaction
SET session persistantNon fiablePréférer SET LOCAL ou init explicite
Prepared statements sessionÀ vérifier selon version/modePeut nécessiter adaptation
Temp tablesRisqueSession serveur non garantie
LISTEN/NOTIFYRisqueDépendance à la session
Advisory locks sessionRisquePré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
Piège
Multiplier le pool applicatif par le nombre de pods est la cause classique d’une explosion de connexions après autoscaling Kubernetes.
17. Monitoring, logs et observabilité
NiveauExemplesQuestion
InfrastructureCPU, mémoire, IOPS, latence disque, réseauLa ressource est-elle saturée ?
PostgreSQLWaits, locks, checkpoints, WAL, vacuum, connectionsPourquoi le moteur attend-il ?
Application/métierLatence endpoint, taux erreur, jobs, commandesQuel impact utilisateur ?
Objectif
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.
SignalAlerteContexte
CPUSeuil + durée, pas pic isoléCorréler top SQL et waits
Storage freePrédiction de saturationInclure WAL/slots/temp
ConnectionsActive + waiting + churnCorréler pool et pods
Replica lagSeuil selon usageReporting vs DR
DeadlocksToute occurrence ou tendanceCollecter logs et SQL
AutovacuumTables non vacuumées / wraparoundPriorité critique
CheckpointDurée/fréquence anormaleI/O et WAL
PITR/backupÉchec ou absence de testNe pas se contenter du statut
MaintenanceÉvénement à venirCoordonner avec application
Cost anomalyÉcart à baselineStorage, replicas, logs
18. Patching et maintenance
  • 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é.
Responsabilité client
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.
  1. Inventorier version moteur, extensions, drivers et paramètres.
  2. Lire release notes fournisseur et PostgreSQL.
  3. Exécuter tests de régression et charge.
  4. Vérifier backups/PITR avant fenêtre.
  5. Communiquer impact et freeze applicatif éventuel.
  6. Surveiller failover/restart et temps de reconnexion.
  7. Contrôler version, logs, réplication, jobs et performance après maintenance.
  8. Documenter anomalies et décider du rollback si possible.
19. Upgrades majeurs PostgreSQL

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
ExtensionsVersion cible, upgrade path, shared preload
SQLMots réservés, fonctions supprimées, casts
PlansRégressions d’optimiseur et statistiques
DriversCompatibilité protocole et auth
Logical replicationSlots, publications, subscriptions
CollationsVersions ICU/glibc et indexes
Jobspg_cron, batchs, ETL
RollbackSnapshot/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.
  1. Créer un clone ou restaurer un environnement représentatif.
  2. Exécuter les prechecks officiels.
  3. Mettre à niveau les extensions et corriger les objets bloquants.
  4. Rejouer tests fonctionnels et charge.
  5. Comparer top SQL et plans avant/après.
  6. Mesurer la durée réelle.
  7. Choisir in-place, logical migration ou blue/green.
  8. Définir point de non-retour et procédure de rollback.
  9. Préparer DNS, secrets, monitoring et jobs sur la cible.
20. Réplication avancée, CDC et intégrations

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.

RisqueEffetContrôle
Subscriber arrêtéWAL retenu, stockage rempliAlerte slot lag + limite/runbook
Failover HASlot absent ou désynchroniséFonction de failover slots/support fournisseur
Table sans PKREPLICA IDENTITY FULL coûteuxAjouter clé/index adapté
DDL non répliquéSchémas divergentsPipeline de migrations coordonné
SequencesValeurs non répliquées automatiquement selon mécanismeSynchronisation explicite
Large transactionsLag et mémoireBatching et sizing
Upgrade majeurAbonnements/slots bloquantsPlan 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.
21. Migration vers Azure ou AWS
InventairePourquoi
Version PostgreSQL et minorDétermine chemins de migration et extensions
Taille data/index/WALDimensionne transfert et RTO
Extensions et modulesPremier risque de compatibilité
TablespacesPlacement à convertir
Paramètres non défautComparer à la liste exposée
Rôles et ownershipRecréer sans superuser
FDW, dblink, outbound networkDépendances externes
Logical slots/publications/subscriptionsRisque WAL et cutover
Jobs OS/cronÀ migrer vers pg_cron ou orchestrateur externe
Accès fichiersSouvent incompatible
Drivers et SSLChaîne de connexion, certificats, auth
RPO/RTOChoix dump/restore vs online migration
MéthodeDowntimeAvantagesLimites
pg_dump/pg_restoreÉlevé à moyenSimple, portable, nettoyageTemps et volume
pg_basebackup/physiqueSouvent non applicable vers PaaSRapide sur VMContrat fournisseur
Logical replication nativeFaibleContrôle SQLDDL, sequences, slots
Azure Migration ServiceFaible à moyenIntégration AzureLimites objets/versions
AWS DMSFaible à moyenCDC et orchestrationValidation et types spécifiques
Read replica / migration mécanisme natifFaibleTopologie procheÉligibilité stricte
Blue/GreenFaibleTest cible et switchoverLimitations par topologie/version
  1. Geler les DDL et déploiements.
  2. Verrouiller ou arrêter les écritures.
  3. Attendre le rattrapage CDC/replication.
  4. Valider row counts, checksums logiques et séquences.
  5. Créer/valider rôles, grants, extensions et paramètres.
  6. Basculer secrets, endpoint ou DNS.
  7. Purger/recréer les pools de connexions.
  8. Exécuter smoke tests et contrôles métier.
  9. Surveiller erreurs, waits, lag, CPU, connexions et jobs.
  10. Déclarer le point de non-retour.
Question indispensable
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.
22. Diagnostic et gestion d’incident
  1. Qualifier si l’incident relève du moteur, du service, du réseau, de l’identité ou de l’application.
  2. Collecter timestamp UTC, resource ID, endpoint, région/AZ, version, changements récents.
  3. Capturer métriques, logs PostgreSQL, events fournisseur et top SQL.
  4. Vérifier capacité, connexions, waits, locks, replication lag et stockage.
  5. Reproduire la requête ou le scénario sur un clone si possible.
  6. Ouvrir un ticket fournisseur avec preuves et corrélation temporelle.
  7. Appliquer le runbook de mitigation : scale, kill session, failover, restore, route traffic.
Outil VMAlternative PaaS
top/htopMétriques compute et Enhanced Monitoring
iostatMétriques IOPS/latence/throughput
straceLogs, wait events, support fournisseur
perf/eBPFPerformance Insights/DB Insights, reproduction
du/find PGDATAMétriques storage + vues SQL
journalctlLogs service/exportés
tcpdumpNetwork flow logs, diagnostics, support
lsofVues 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:
23. Coûts et FinOps
PosteAzure/AWS PaaS
Compute primaireSKU/classe et durée
HAStandby ou nœuds supplémentaires
Read replicasCompute + stockage par replica
StockageGo/GiB provisionnés + tier/IOPS
BackupsPart gratuite éventuelle puis dépassement, copies régionales
RéseauInter-AZ/inter-région/egress selon flux
MonitoringLogs, métriques avancées, rétention
KMS/Key Vault/SecretsOpérations et stockage selon services
SupportPlan de support
Migration/DREnvironnements temporaires, DMS, data transfer
PosteSouvent oublié
VM primaire/standbys/DCS/proxyToute la topologie, pas une seule VM
Stockage et snapshotsVolumes, IOPS, copies, repository backup
Licences/outilsMonitoring, backup, sécurité éventuels
Temps humainDBA, Linux, SRE, astreinte, patching
OutagesTemps de résolution et impact métier
Dette plateformeMises à niveau, automation, docs
Capacité de secoursStandbys et région DR sous-utilisés
Audit/compliancePreuves, 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.
Méthode
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.
24. Gouvernance, conformité et audit
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.
PreuveFréquence
Configuration réseau privéÀ chaque changement
Liste rôles/grantsMensuel ou trimestriel
Test PITR et RTOTrimestriel
Test failover/DRSemestriel ou annuel
Rapport versions/extensionsMensuel
Patching/maintenance historyContinu
Alertes critiques testéesTrimestriel
Clés et rotationSelon politique
Exceptions publiquesRevue mensuelle
Coûts et capacitéMensuel
Important
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.

25. Le DBA dans un monde PaaS
  • 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écisionConsé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
Organisation cible
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.
26. Matrice de décision
CritèrePoids suggéréPaaS favorisé si…VM favorisée si…
Accès OS requis10NonOui, démontré
Extension custom10NonOui
Charge ops disponible9FaibleÉquipe mature 24/7
Time-to-market8CourtSecondaire
Standardisation8PrioritaireCustom requis
Tuning système7Standard suffitDéterminant
DR multi-région7Briques cloud souhaitéesTopologie custom
Coût humain7À réduireDéjà amorti
Portabilité6SQL suffitInfrastructure portable exigée
Conformité6Contrôles cloud utilesContrô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.
WorkloadAzure/AWS PaaSVM
ERP/web standardTrès favorablePossible mais plus d’ops
MicroservicesFavorable avec pooling et gouvernancePossible avec plateforme solide
BI/reportingFavorable avec replicas dédiéesFavorable si stockage custom requis
Geospatial PostGISFavorable si version extension supportéeVM si modules spécifiques
TimeseriesÉtudier extension et coûtsVM si tuning/extension avancés
CDC intensifPossible mais tester slots/failoverPlus de contrôle
Très faible latence NVMe localeMoins naturelVM/bare metal
Base embarquée dans applianceNon naturelVM/serveur
Réglementé standardSouvent favorableSi souveraineté locale imposée
R&D PostgreSQL customDéfavorableTrès favorable
Verdict pragmatique
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.
27. Architectures de référence
Blueprint Azure
AppsAKS/App Service/VM
Private DNSHub & spoke
Private Link/VNetNo public access
Flexible Server HAZone redundant
Read replicaReporting/DR
Azure MonitorLogs + alerts
Entra ID, Managed Identity, Key Vault, Terraform/Bicep et tests PITR complètent le blueprint.
  • 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.
Blueprint AWS
AppsEKS/ECS/EC2/Lambda
VPCPrivate subnets
Security GroupsLeast privilege
RDS Multi-AZInstance ou cluster
Read replicaReporting/DR
CloudWatchDB Insights + alarms
KMS, Secrets Manager, RDS Proxy, Terraform/CloudFormation et tests restore complètent le blueprint.
  • 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.
Blueprint VM Linux
Load balancerHAProxy/Envoy
PrimaryPostgreSQL
Standby 1Sync
Standby 2Async/DR
Patroni + DCSElection/quorum
pgBackRestObject storage
Monitoring, fencing, image Linux, TLS, secrets et automation sont obligatoires.
  • 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.

CatalogueTraitement
Tier A standard critiquePaaS HA + DR + gouvernance forte
Tier B standardPaaS sans option excessive
Tier C dev/testPaaS économique ou mutualisation
Exception extension customVM database platform
R&D moteurVM/bare metal isolé
28. Checklist d’évaluation
  • 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ésultatDécision
Aucun blocage, workload standardGo PaaS
Quelques écarts remplaçablesGo 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 faiblesComparer TCO complet
Équipe VM mature et parc massifÉtude économique approfondie
Exigences non documentéesSuspendre la décision
29. Expliquer la différence simplement
Réponse
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.

AngleMessage
BusinessRéduction du délai de livraison et de la charge d’astreinte
RisqueMoins d’erreurs de plateforme, mais dépendance au contrat du service
FinanceFacture plus visible, TCO souvent meilleur à petite/moyenne échelle
TechniqueStandardisation contre liberté système
OrganisationLe DBA devient DBRE/cloud DBA, il ne disparaît pas
DécisionPaaS par défaut, VM sur exception documentée
30. Cheat-sheet
PaaS — GainsPaaS — Pertes
Provisioning rapidePas de root/SSH
Backups + PITR intégrésPas de PGDATA
HA orchestréePas de vrai SUPERUSER
Patching plateformeParamètres limités
Monitoring natifExtensions cataloguées
Réseau/identité cloudTopologies avancées encadrées
Scaling simplifiéMaintenance dans le cadre fournisseur
Moins d’astreinte systèmeDé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