15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
23.10.2024
1 +1

PostgreSQL sur un VPS : Architecture, Optimisation des Performances et Guide de Déploiement

PostgreSQL est un système de gestion de base de données objet-relationnel (ORDBMS) avancé et open-source qui prend en charge les requêtes SQL et JSON, les transactions conformes ACID et les types de données extensibles. Lorsqu’il est déployé sur un Serveur Privé Virtuel, il bénéficie de ressources de calcul dédiées, d’un accès complet à la configuration au niveau du noyau et d’une isolation réseau — des capacités que l’hébergement mutualisé ne peut fondamentalement pas offrir.

Pour les charges de travail en production, cette combinaison est immédiatement importante : une valeur shared_buffers mal configurée sur un hébergement mutualisé est impossible à corriger, une requête incontrôlée sur l’instance d’un voisin peut priver votre I/O de ressources, et vous ne pouvez pas installer des extensions comme PostGIS ou pg_partman sans accès root. Un VPS élimine ces trois contraintes à la fois.

Pourquoi PostgreSQL surpasse les autres options RDBMS open-source

Avant d’examiner les avantages spécifiques au VPS, il convient de comprendre ce qui fait de PostgreSQL le moteur de choix par rapport à MySQL/MariaDB pour les charges de travail complexes.

FonctionnalitéPostgreSQLMySQL 8.xMariaDB 10.x
Conformité ACIDComplète, y compris DDLComplèteComplète
Indexation JSON/JSONBJSONB natif avec index GINJSON (pas de stockage binaire)JSON (pas de stockage binaire)
Support géospatialPostGIS (standard industriel)Types spatiaux limitésTypes spatiaux limités
Recherche plein texteIntégrée, configurableIndex FULLTEXT basiqueIndex FULLTEXT basique
Partitionnement de tablesDéclaratif, plage/liste/hachagePartitionnement pris en chargePartitionnement pris en charge
Exécution de requêtes parallèlesOui (workers configurables)LimitéLimité
Types de données personnalisésOui (CREATE TYPE)NonNon
Procédures stockées (PL/pgSQL)Langage procédural completBasiqueBasique
Journalisation en écriture anticipée (WAL)Configurable, réplication en streamingJournal binaireJournal binaire
Modèle de concurrenceMVCC (pas de verrous en lecture)MVCCMVCC
Réplication logiqueOui (publication/abonnement)OuiOui
Wrappers de données étrangèresOui (postgres_fdw, etc.)NonNon

Le modèle Multi-Version Concurrency Control (MVCC) de PostgreSQL mérite une mention particulière : les lecteurs ne bloquent jamais les écrivains et les écrivains ne bloquent jamais les lecteurs. Cela est architecturalement supérieur pour les charges de travail OLTP/OLAP mixtes où les requêtes analytiques de longue durée bloqueraient autrement les tables transactionnelles.

Efficacité des coûts : allocation des ressources sans surprovisionnement

Un plan d’Hébergement VPS fournit des cœurs CPU garantis, de la RAM et du stockage NVMe SSD à une fraction du coût du matériel bare-metal. La logique économique est simple : les besoins en mémoire de PostgreSQL évoluent avec max_connections et work_mem, pas avec la taille brute du serveur. Un VPS de 4 GB RAM correctement configuré servant 50 connexions simultanées surpassera une instance de 8 GB RAM avec des paramètres par défaut et 200 connexions inactives consommant de la mémoire partagée.

La stratégie pratique d’efficacité des coûts consiste à démarrer avec un VPS de niveau intermédiaire, à analyser vos métriques pg_stat_activity et pg_stat_bgwriter réelles après deux semaines de charge en production, puis à redimensionner verticalement. Cette approche basée sur les données évite l’erreur courante de surprovisionnement au lancement.

Un facteur de coût souvent négligé : le démon autovacuum de PostgreSQL nécessite de la marge CPU. Sur un hébergement mutualisé, l’autovacuum est fréquemment limité par le fournisseur, entraînant un gonflement des tables et des plans de requêtes dégradés au fil du temps. Sur un VPS, vous contrôlez autovacuum_vacuum_cost_delay et autovacuum_max_workers directement.

Accès root complet et contrôle de l’environnement

Contrairement aux services de bases de données gérées ou à l’Hébergement Web Mutualisé, un VPS vous donne un accès illimité à la couche du système d’exploitation. Ce n’est pas simplement une commodité — c’est une exigence absolue pour plusieurs fonctionnalités de PostgreSQL.

Ce que l’accès root permet que les environnements mutualisés bloquent :

  • L’installation d’extensions PostgreSQL (CREATE EXTENSION postgis, CREATE EXTENSION pg_trgm, CREATE EXTENSION timescaledb)
  • La modification des paramètres du noyau qui affectent directement les performances de PostgreSQL (vm.overcommit_memory, vm.swappiness, huge_pages)
  • La configuration de pg_hba.conf avec des méthodes d’authentification personnalisées (SCRAM-SHA-256, LDAP, authentification par certificat)
  • L’exécution de pg_upgrade pour les migrations de versions majeures sans intervention du fournisseur
  • Le montage de volumes de tablespace dédiés sur des périphériques de blocs séparés pour la séparation des I/O entre les index et les fichiers heap

Réglage critique du noyau pour PostgreSQL sous Linux :

# Disable transparent huge pages (causes latency spikes in PostgreSQL)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# Set vm.overcommit_memory to allow PostgreSQL shared memory allocation
sysctl -w vm.overcommit_memory=2
sysctl -w vm.overcommit_ratio=80

# Reduce swappiness to prevent paging PostgreSQL shared buffers
sysctl -w vm.swappiness=1

# Persist these settings
echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
echo "vm.overcommit_ratio=80" >> /etc/sysctl.conf
echo "vm.swappiness=1" >> /etc/sysctl.conf

Ces paramètres sont invisibles pour les services de bases de données gérées au niveau applicatif et sont fréquemment la cause principale de dégradations de performances inexpliquées dans les instances PostgreSQL hébergées dans le cloud.

Optimisation des performances : les paramètres postgresql.conf qui comptent vraiment

Les paramètres d’installation par défaut de PostgreSQL sont intentionnellement conservateurs — ils sont conçus pour fonctionner sur une machine de 256 MB RAM du début des années 2000. Sur un VPS moderne avec 4–16 GB RAM et stockage NVMe, les valeurs par défaut laissent la majorité des capacités matérielles inutilisées.

Configuration de la mémoire

# postgresql.conf — tuned for a 8 GB RAM VPS, OLTP workload

# Set to 25% of total RAM
shared_buffers = 2GB

# Estimate of OS cache available to PostgreSQL (typically 50-75% of RAM)
effective_cache_size = 6GB

# Per-sort/hash operation memory (multiply by max_connections for worst case)
work_mem = 32MB

# For VACUUM, CREATE INDEX, ALTER TABLE operations
maintenance_work_mem = 512MB

# Enable huge pages if kernel supports it
huge_pages = try

Le piège work_mem : Définir work_mem = 256MB avec max_connections = 100 signifie que PostgreSQL pourrait théoriquement allouer 25,6 GB de RAM pour les seules opérations de tri — dépassant largement la mémoire physique et déclenchant des kills OOM. Calculez toujours work_mem comme suit : (available_RAM - shared_buffers) / (max_connections * 2).

Configuration du stockage et du WAL

# For NVMe SSD storage — set to 1 for spinning disks, 200 for NVMe
random_page_cost = 1.1
effective_io_concurrency = 200

# WAL configuration for durability vs. performance tradeoff
wal_buffers = 64MB
checkpoint_completion_target = 0.9
checkpoint_timeout = 10min

# For write-heavy workloads, consider asynchronous commit
# (risk: last ~1 transaction lost on crash, not data corruption)
synchronous_commit = on  # Keep 'on' for financial data

Gestion des connexions

# Avoid setting this above what your application actually needs
max_connections = 100

# Use PgBouncer in transaction pooling mode for high-concurrency apps
# A VPS allows you to install and configure PgBouncer locally

PgBouncer n’est pas optionnel pour les applications avec plus de 50 utilisateurs simultanés. Chaque processus backend PostgreSQL consomme environ 5–10 MB de RAM. À 200 connexions, cela représente 1–2 GB consommés par des processus inactifs. PgBouncer en mode de pooling de transactions multiplexe des centaines de connexions d’applications sur un petit pool de backends PostgreSQL réels.

# Install PgBouncer on Debian/Ubuntu
apt install pgbouncer

# Minimal pgbouncer.ini configuration
cat /etc/pgbouncer/pgbouncer.ini
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb

[pgbouncer]
listen_port = 6432
listen_addr = 127.0.0.1
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20

Renforcement de la sécurité : au-delà de l’installation par défaut

Une installation fraîche de PostgreSQL sur un VPS présente plusieurs failles de sécurité qui doivent être corrigées avant que l’instance soit accessible depuis le réseau.

Isolation au niveau réseau

PostgreSQL ne devrait jamais écouter sur une IP publique sauf si c’est absolument nécessaire. Liez-le à localhost et utilisez le tunneling SSH ou un VPN pour l’administration à distance.

# In postgresql.conf
listen_addresses = 'localhost'

# For replication or application servers on a private network only
# listen_addresses = '127.0.0.1,10.0.0.1'

Configurez pg_hba.conf pour imposer l’authentification SCRAM-SHA-256 (la valeur par défaut md5 est cryptographiquement faible) :

# /etc/postgresql/16/main/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             postgres                                peer
local   all             all                                     scram-sha-256
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256
# Reject all other connections by default (no catch-all line)

Chiffrement SSL/TLS pour les connexions distantes

Si votre serveur d’application se connecte à PostgreSQL via un réseau, le chiffrement de la connexion est obligatoire. Associez cela à un Certificat SSL pour votre couche applicative et configurez la pile TLS propre à PostgreSQL :

# Generate a self-signed certificate for internal use
openssl req -new -x509 -days 365 -nodes 
  -out /etc/postgresql/16/main/server.crt 
  -keyout /etc/postgresql/16/main/server.key

chmod 600 /etc/postgresql/16/main/server.key
chown postgres:postgres /etc/postgresql/16/main/server.{crt,key}
# postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_min_protocol_version = 'TLSv1.2'

Contrôle d’accès basé sur les rôles

Le principe du moindre privilège s’applique strictement aux rôles de base de données :

-- Create an application role with minimal permissions
CREATE ROLE app_user WITH LOGIN PASSWORD 'strong_password_here';
GRANT CONNECT ON DATABASE mydb TO app_user;
GRANT USAGE ON SCHEMA public TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;

-- Create a read-only analytics role
CREATE ROLE analytics_reader WITH LOGIN PASSWORD 'another_strong_password';
GRANT CONNECT ON DATABASE mydb TO analytics_reader;
GRANT USAGE ON SCHEMA public TO analytics_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO analytics_reader;

-- Never use the superuser 'postgres' role for application connections

Règles de pare-feu

# Allow PostgreSQL only from specific application server IP
ufw allow from 10.0.0.5 to any port 5432
ufw deny 5432

# Verify
ufw status verbose

Architecture de sauvegarde et de récupération

PostgreSQL fournit deux mécanismes de sauvegarde fondamentalement différents, chacun adapté à des objectifs de récupération différents.

Méthode de sauvegardeOutilType de récupérationRPORTOCas d’utilisation
Sauvegarde logiquepg_dump / pg_dumpallRestauration au niveau objetHeuresMoyenMigrations de schémas, restauration sélective de tables
Sauvegarde physiquepg_basebackupRestauration complète du clusterMinutes (avec WAL)RapideReprise après sinistre, création de serveur standby
Archivage continuArchivage WAL + pg_basebackupRécupération à un instant précisSecondesDépend du volume WALExigence de zéro perte de données
SnapshotSnapshot du fournisseur VPSRestauration complète du serveurAu moment du snapshotRapideFilet de sécurité avant mise à niveau

Sauvegarde logique avec compression :

# Dump a single database in custom format (supports parallel restore)
pg_dump -U postgres -Fc -Z 9 mydb > /backup/mydb_$(date +%Y%m%d).dump

# Restore
pg_restore -U postgres -d mydb_restored /backup/mydb_20240115.dump

# Dump all databases including roles and tablespaces
pg_dumpall -U postgres | gzip > /backup/full_cluster_$(date +%Y%m%d).sql.gz

Sauvegarde physique pour la reprise après sinistre :

# Take a base backup (can run while PostgreSQL is live)
pg_basebackup -U replication_user -D /backup/base -Ft -z -Xs -P

# This creates base.tar.gz and pg_wal.tar.gz
# Combined with WAL archiving, enables point-in-time recovery

Automatisation avec cron :

# /etc/cron.d/postgres-backup
0 2 * * * postgres pg_dump -Fc mydb > /backup/mydb_$(date +%Y%m%d_%H%M).dump
0 3 * * 0 postgres pg_dumpall | gzip > /backup/full_$(date +%Y%m%d).sql.gz

# Prune backups older than 30 days
0 4 * * * root find /backup/ -name "*.dump" -mtime +30 -delete

Scalabilité : verticale, horizontale et mise à l’échelle en lecture

Mise à l’échelle verticale

Sur un VPS, la mise à l’échelle verticale (ajout de CPU, RAM, stockage) est généralement une opération en direct ou ne nécessite qu’un bref redémarrage. Après une mise à niveau de la RAM, mettez à jour shared_buffers, effective_cache_size et work_mem proportionnellement. Après l’ajout de cœurs CPU, augmentez max_parallel_workers_per_gather et max_parallel_maintenance_workers.

# After upgrading from 4 to 8 CPU cores
max_parallel_workers_per_gather = 4
max_parallel_maintenance_workers = 2
max_parallel_workers = 8

Réplication en streaming pour la mise à l’échelle en lecture

La réplication en streaming intégrée de PostgreSQL crée un standby actif capable de servir des requêtes en lecture, déchargeant les charges de travail analytiques du primaire :

# On primary: create replication user
psql -U postgres -c "CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'rep_password';"

# In pg_hba.conf on primary
# host replication replicator 10.0.0.2/32 scram-sha-256

# In postgresql.conf on primary
# wal_level = replica
# max_wal_senders = 3
# wal_keep_size = 1GB
# On standby: initialize from primary
pg_basebackup -h 10.0.0.1 -U replicator -D /var/lib/postgresql/16/main 
  -P -Xs -R

# The -R flag creates standby.signal and populates primary_conninfo automatically

Réplication logique pour la réplication sélective

La réplication logique permet de répliquer des tables spécifiques vers une autre instance PostgreSQL, utile pour les pipelines d’entrepôts de données :

-- On publisher
CREATE PUBLICATION analytics_pub FOR TABLE orders, customers, products;

-- On subscriber
CREATE SUBSCRIPTION analytics_sub
  CONNECTION 'host=10.0.0.1 dbname=mydb user=replicator password=rep_password'
  PUBLICATION analytics_pub;

Pour les applications nécessitant un Serveur Dédié pour la base de données primaire avec des réplicas VPS gérant le trafic en lecture, cette architecture offre à la fois performance et efficacité des coûts.

Fonctionnalités avancées de PostgreSQL qui méritent d’être activées

JSONB pour les charges de travail relationnelles/documentaires hybrides

-- Create a table with JSONB column
CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  occurred_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  payload JSONB NOT NULL
);

-- Create a GIN index for fast JSONB queries
CREATE INDEX idx_events_payload ON events USING GIN (payload);

-- Query nested JSON efficiently
SELECT * FROM events
WHERE payload @> '{"type": "purchase", "currency": "USD"}';

-- Extract and index a specific JSON key
CREATE INDEX idx_events_user_id ON events ((payload->>'user_id'));

Partitionnement de tables pour les grands ensembles de données

-- Range partitioning by month (ideal for time-series data)
CREATE TABLE measurements (
  id BIGSERIAL,
  recorded_at TIMESTAMPTZ NOT NULL,
  sensor_id INT,
  value NUMERIC
) PARTITION BY RANGE (recorded_at);

CREATE TABLE measurements_2024_01
  PARTITION OF measurements
  FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');

CREATE TABLE measurements_2024_02
  PARTITION OF measurements
  FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');

-- PostgreSQL automatically routes inserts and prunes partitions in queries

PostGIS pour les applications géospatiales

# Install PostGIS extension
apt install postgresql-16-postgis-3

# Enable in database
psql -U postgres -d mydb -c "CREATE EXTENSION postgis;"
-- Store and query geographic coordinates
CREATE TABLE locations (
  id SERIAL PRIMARY KEY,
  name TEXT,
  geom GEOMETRY(Point, 4326)
);

-- Find all locations within 10km of a point
SELECT name, ST_Distance(geom::geography, ST_MakePoint(-73.935242, 40.730610)::geography) AS distance_m
FROM locations
WHERE ST_DWithin(geom::geography, ST_MakePoint(-73.935242, 40.730610)::geography, 10000)
ORDER BY distance_m;

Surveillance : pile d’observabilité pour PostgreSQL en production

Le dépannage réactif est insuffisant pour les bases de données en production. Une pile d’observabilité proactive détecte la dégradation avant qu’elle ne devienne une panne.

Vues de statistiques intégrées de PostgreSQL

-- Identify slow queries (requires pg_stat_statements extension)
CREATE EXTENSION pg_stat_statements;

SELECT query, calls, total_exec_time / calls AS avg_ms,
       rows / calls AS avg_rows
FROM pg_stat_statements
ORDER BY avg_ms DESC
LIMIT 20;

-- Check for table bloat and vacuum status
SELECT schemaname, relname, n_dead_tup, last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

-- Monitor replication lag
SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn,
       (sent_lsn - replay_lsn) AS replication_lag_bytes
FROM pg_stat_replication;

-- Find long-running queries
SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';

Pile Prometheus + postgres_exporter

# Install postgres_exporter
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz
tar xzf postgres_exporter-0.15.0.linux-amd64.tar.gz
mv postgres_exporter-0.15.0.linux-amd64/postgres_exporter /usr/local/bin/

# Create a monitoring role in PostgreSQL
psql -U postgres -c "CREATE ROLE postgres_exporter WITH LOGIN PASSWORD 'monitor_pass';"
psql -U postgres -c "GRANT pg_monitor TO postgres_exporter;"

# Run the exporter
export DATA_SOURCE_NAME="postgresql://postgres_exporter:monitor_pass@localhost:5432/postgres?sslmode=disable"
postgres_exporter --web.listen-address=":9187"

Associez postgres_exporter à un tableau de bord Grafana (l’ID de tableau de bord 9628 sur grafana.com couvre toutes les métriques critiques de PostgreSQL) et configurez des alertes pour : le lag de réplication dépassant 30 secondes, l’approche du wraparound des ID de transaction, le taux de succès du cache tombant en dessous de 95 %, et le nombre de tuples morts dépassant 10 % des tuples vivants.

Matrice des cas d’utilisation : adapter la configuration PostgreSQL à la charge de travail

Charge de travailParamètres clésExtensionsStratégie de mise à l’échelle
OLTP (e-commerce, SaaS)work_mem faible, PgBouncer, synchronous_commit=onpg_stat_statements, pgcryptoVertical + réplicas en lecture
Analytique / OLAPwork_mem élevé, workers parallèles, synchronous_commit=offpg_partman, tablefuncPartitionnement + stockage en colonnes
IoT séries temporellesPartitionnement par temps, réglage autovacuumTimescaleDB, pg_partmanÉlagage de partitions + compression
Géospatial / GISIndex spatiaux, effective_io_concurrencyPostGIS, pg_routingServeur dédié pour les grands ensembles de données
Backend API (JSON)Index GIN sur JSONB, work_mem pour les agrégationspg_trgm, uuid-osspRéplicas en lecture pour les API à forte charge GET
Recherche plein texteColonnes tsvector, index GINpg_trgm, unaccentScans d’index uniquement, index partiels

Pour les équipes développant des backends API ou des applications web, associer PostgreSQL à un VPS avec cPanel fournit un panneau de contrôle géré avec toute la flexibilité de la base de données. Pour les équipes d’infrastructure qui préfèrent la gestion en ligne de commande, Panneaux de Contrôle VPS offre une sélection plus large d’options de panneaux.

Liste de contrôle pratique avant de déployer PostgreSQL sur un VPS

Dimensionnement matériel :

  • Calculez shared_buffers à 25 % de la RAM totale
  • Vérifiez le stockage NVMe SSD — les écritures WAL de PostgreSQL sont sensibles à la latence
  • Allouez au moins 2 cœurs CPU dédiés pour les charges de travail en production

Base de sécurité :

  • Liez listen_addresses uniquement à l’adresse privée/localhost
  • Remplacez md5 par scram-sha-256 dans pg_hba.conf
  • Activez SSL avec TLS 1.2 minimum pour toute connexion distante
  • Créez des rôles spécifiques aux applications — n’utilisez jamais le superutilisateur postgres dans le code applicatif
  • Configurez ufw ou iptables pour n’autoriser que les IP sources connues sur le port 5432

Base de performance :

  • Désactivez les huge pages transparentes au niveau du système d’exploitation
  • Définissez vm.swappiness=1 pour éviter la pagination des buffers partagés
  • Installez et configurez PgBouncer si le nombre de connexions dépasse 50
  • Activez pg_stat_statements dès le premier jour — le profilage rétroactif des requêtes est impossible

Sauvegarde et récupération :

  • Automatisez pg_dump avec cron, testez les restaurations mensuellement
  • Implémentez l’archivage WAL si les exigences RPO sont inférieures à 1 heure
  • Combinez les sauvegardes au niveau applicatif avec les snapshots du fournisseur VPS pour une protection en couches

Observabilité :

  • Déployez postgres_exporter + Prometheus + Grafana avant la mise en production
  • Configurez des alertes sur le lag de réplication, l’âge des ID de transaction et le taux de succès du cache
  • Examinez pg_stat_bgwriter chaque semaine pour détecter la pression des checkpoints

FAQ

Quelle version de PostgreSQL dois-je installer sur un nouveau VPS ?

Installez toujours la dernière version stable majeure (PostgreSQL 16 en 2024) depuis le dépôt officiel PGDG, et non la version fournie avec votre distribution Linux. Les paquets de distribution sont souvent en retard de 1 à 2 versions majeures et ne reçoivent aucun backport de fonctionnalités en amont. Utilisez apt.postgresql.org ou yum.postgresql.org pour l’installation.

De combien de RAM a réellement besoin un VPS PostgreSQL ?

Pour une petite application en production avec moins de 50 connexions simultanées et un ensemble de données inférieur à 50 GB, 4 GB de RAM est un minimum pratique. Définissez shared_buffers = 1GB, work_mem = 16MB, et utilisez PgBouncer. Pour les ensembles de données dépassant la RAM disponible, concentrez-vous sur la couverture des index et l’optimisation des plans de requêtes avant d’ajouter du matériel — un index manquant sur une table de 100 GB ne sera pas résolu en ajoutant de la RAM.

Est-il sûr d’exécuter PostgreSQL et l’application sur le même VPS ?

Oui, pour les charges de travail petites à moyennes. Le risque est la contention des ressources : un pic de mémoire dans l’application peut déclencher des kills OOM qui terminent PostgreSQL. Atténuez cela en définissant oom_score_adj de PostgreSQL à une valeur négative (le rendant moins susceptible d’être tué) et en utilisant cgroups pour plafonner la mémoire de l’application.

Quelle est la différence entre pg_dump et pg_basebackup ?

pg_dump produit une sauvegarde logique d’une seule base de données — il exporte des instructions SQL ou un format binaire personnalisé pouvant être restauré sélectivement (tables individuelles, schémas). pg_basebackup copie l’intégralité du répertoire de données PostgreSQL au niveau binaire, produisant une sauvegarde complète du cluster adaptée à la reprise après sinistre et à l’initialisation d’un serveur standby. Utilisez les deux : pg_dump pour les restaurations granulaires, pg_basebackup pour les scénarios de récupération complète.

Comment mettre à niveau PostgreSQL vers une nouvelle version majeure sur un VPS en toute sécurité ?

Utilisez pg_upgrade avec l’indicateur --check d’abord pour valider la compatibilité sans effectuer de modifications. Effectuez une sauvegarde complète pg_basebackup avant de procéder. La mise à niveau elle-même s’effectue hors ligne (PostgreSQL doit être arrêté). Pour les mises à niveau de versions majeures sans interruption, utilisez la réplication logique : configurez une nouvelle instance PostgreSQL 16 comme abonné logique du primaire PostgreSQL 15, laissez-la se synchroniser, puis effectuez un basculement coordonné avec un temps d’arrêt minimal.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer