15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
23.10.2024
2 +1

PostgreSQL en un VPS: Guía de Arquitectura, Optimización del Rendimiento e Implementación

PostgreSQL es un sistema avanzado de gestión de bases de datos objeto-relacionales (ORDBMS) de código abierto que admite consultas SQL y JSON, transacciones compatibles con ACID y tipos de datos extensibles. Cuando se implementa en un Servidor Privado Virtual, obtiene recursos de cómputo dedicados, acceso completo a la configuración a nivel de kernel y aislamiento de red — capacidades que el alojamiento compartido fundamentalmente no puede proporcionar.

Para cargas de trabajo en producción, esta combinación importa de inmediato: un valor shared_buffers mal configurado en alojamiento compartido no tiene solución, una consulta desbocada en la instancia de un vecino puede agotar tu I/O, y no puedes instalar extensiones como PostGIS o pg_partman sin acceso root. Un VPS elimina las tres limitaciones a la vez.

Por qué PostgreSQL supera a otras opciones RDBMS de código abierto

Antes de examinar las ventajas específicas del VPS, vale la pena entender qué hace de PostgreSQL el motor preferido sobre MySQL/MariaDB para cargas de trabajo complejas.

CaracterísticaPostgreSQLMySQL 8.xMariaDB 10.x
Conformidad ACIDCompleta, incluido DDLCompletaCompleta
Indexación JSON/JSONBJSONB nativo con índices GINJSON (sin almacenamiento binario)JSON (sin almacenamiento binario)
Soporte geoespacialPostGIS (estándar de la industria)Tipos espaciales limitadosTipos espaciales limitados
Búsqueda de texto completoIntegrada, configurableÍndice FULLTEXT básicoÍndice FULLTEXT básico
Particionamiento de tablasDeclarativo, por rango/lista/hashParticionamiento compatibleParticionamiento compatible
Ejecución de consultas en paraleloSí (workers configurables)LimitadoLimitado
Tipos de datos personalizadosSí (CREATE TYPE)NoNo
Procedimientos almacenados (PL/pgSQL)Lenguaje procedural completoBásicoBásico
Registro de escritura anticipada (WAL)Configurable, replicación en streamingRegistro binarioRegistro binario
Modelo de concurrenciaMVCC (sin bloqueos de lectura)MVCCMVCC
Replicación lógicaSí (publicación/suscripción)
Envoltorios de datos externosSí (postgres_fdw, etc.)NoNo

El modelo Multi-Version Concurrency Control (MVCC) de PostgreSQL merece una mención especial: los lectores nunca bloquean a los escritores y los escritores nunca bloquean a los lectores. Esto es arquitectónicamente superior para cargas de trabajo mixtas OLTP/OLAP donde las consultas analíticas de larga duración de otro modo bloquearían las tablas transaccionales.

Eficiencia de costos: asignación de recursos sin sobreaprovisionamiento

Un plan de VPS Hosting proporciona núcleos CPU garantizados, RAM y almacenamiento NVMe SSD a una fracción del costo del hardware bare-metal. La lógica económica es sencilla: los requisitos de memoria de PostgreSQL escalan con max_connections y work_mem, no con el tamaño bruto del servidor. Un VPS de 4 GB RAM correctamente ajustado que sirve 50 conexiones concurrentes superará a una instancia de 8 GB RAM con configuración predeterminada y 200 conexiones inactivas consumiendo memoria compartida.

La estrategia práctica de eficiencia de costos es comenzar con un VPS de nivel medio, analizar tus métricas reales de pg_stat_activity y pg_stat_bgwriter después de dos semanas de carga en producción, y luego escalar verticalmente. Este enfoque basado en datos previene el error común de sobreaprovisionamiento en el lanzamiento.

Un factor de costo frecuentemente ignorado: el daemon autovacuum de PostgreSQL requiere margen de CPU. En alojamiento compartido, el autovacuum es frecuentemente limitado por el proveedor, causando hinchazón de tablas y planes de consulta degradados con el tiempo. En un VPS, controlas autovacuum_vacuum_cost_delay y autovacuum_max_workers directamente.

Acceso root completo y control del entorno

A diferencia de los servicios de bases de datos gestionadas o el Alojamiento Web Compartido, un VPS te otorga acceso sin restricciones a la capa del sistema operativo. Esto no es simplemente una comodidad — es un requisito estricto para varias capacidades de PostgreSQL.

Lo que el acceso root habilita y que los entornos compartidos bloquean:

  • Instalar extensiones de PostgreSQL (CREATE EXTENSION postgis, CREATE EXTENSION pg_trgm, CREATE EXTENSION timescaledb)
  • Modificar parámetros del kernel que afectan directamente el rendimiento de PostgreSQL (vm.overcommit_memory, vm.swappiness, huge_pages)
  • Configurar pg_hba.conf con métodos de autenticación personalizados (SCRAM-SHA-256, LDAP, autenticación basada en certificados)
  • Ejecutar pg_upgrade para migraciones de versiones principales sin intervención del proveedor
  • Montar volúmenes de tablespace dedicados en dispositivos de bloque separados para la separación de I/O entre índices y archivos heap

Ajuste crítico del kernel para PostgreSQL en 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

Estas configuraciones son invisibles para los servicios de bases de datos gestionadas a nivel de aplicación y son frecuentemente la causa raíz de la degradación de rendimiento inexplicable en instancias PostgreSQL alojadas en la nube.

Ajuste de rendimiento: los parámetros de postgresql.conf que realmente importan

Los parámetros de instalación predeterminados de PostgreSQL son intencionalmente conservadores — están diseñados para ejecutarse en una máquina con 256 MB RAM de principios de los años 2000. En un VPS moderno con 4–16 GB RAM y almacenamiento NVMe, los valores predeterminados dejan sin usar la mayor parte de la capacidad del hardware.

Configuración de memoria

# 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

La trampa de work_mem: Configurar work_mem = 256MB con max_connections = 100 significa que PostgreSQL podría teóricamente asignar 25,6 GB de RAM solo para operaciones de ordenación — superando con creces la memoria física y provocando kills por OOM. Siempre calcula work_mem como: (available_RAM - shared_buffers) / (max_connections * 2).

Configuración de almacenamiento y 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

Gestión de conexiones

# 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 no es opcional para aplicaciones con más de 50 usuarios concurrentes. Cada proceso backend de PostgreSQL consume aproximadamente 5–10 MB de RAM. Con 200 conexiones, eso representa 1–2 GB consumidos por procesos inactivos. PgBouncer en modo de agrupación de transacciones multiplexa cientos de conexiones de aplicaciones en un pequeño grupo de backends reales de PostgreSQL.

# 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

Refuerzo de seguridad: más allá de la instalación predeterminada

Una instalación nueva de PostgreSQL en un VPS tiene varias brechas de seguridad que deben cerrarse antes de que la instancia sea accesible desde la red.

Aislamiento a nivel de red

PostgreSQL nunca debería escuchar en una IP pública a menos que sea absolutamente necesario. Vincúlalo a localhost y usa túneles SSH o una VPN para la administración remota.

# 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'

Configura pg_hba.conf para aplicar la autenticación SCRAM-SHA-256 (el md5 predeterminado es criptográficamente débil):

# /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)

Cifrado SSL/TLS para conexiones remotas

Si tu servidor de aplicaciones se conecta a PostgreSQL a través de una red, cifrar la conexión es obligatorio. Combina esto con un Certificado SSL para tu capa de aplicación y configura la propia pila TLS de 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'

Control de acceso basado en roles

El principio de mínimo privilegio se aplica estrictamente a los roles de base de datos:

-- 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

Reglas de firewall

# 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

Arquitectura de copias de seguridad y recuperación

PostgreSQL proporciona dos mecanismos de copia de seguridad fundamentalmente diferentes, cada uno adecuado para distintos objetivos de recuperación.

Método de copia de seguridadHerramientaTipo de recuperaciónRPORTOCaso de uso
Copia de seguridad lógicapg_dump / pg_dumpallRestauración a nivel de objetoHorasMedioMigraciones de esquema, restauración selectiva de tablas
Copia de seguridad físicapg_basebackupRestauración completa del clústerMinutos (con WAL)RápidoRecuperación ante desastres, creación de standby
Archivado continuoArchivado WAL + pg_basebackupRecuperación a un punto en el tiempoSegundosDepende del volumen WALRequisito de cero pérdida de datos
SnapshotSnapshot del proveedor VPSRestauración completa del servidorEn el momento del snapshotRápidoRed de seguridad previa a actualizaciones

Copia de seguridad lógica con compresión:

# 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

Copia de seguridad física para recuperación ante desastres:

# 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

Automatizar con 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

Escalabilidad: vertical, horizontal y escalado de lectura

Escalado vertical

En un VPS, el escalado vertical (añadir CPU, RAM, almacenamiento) es típicamente una operación en vivo o requiere solo un breve reinicio. Tras actualizar la RAM, actualiza shared_buffers, effective_cache_size y work_mem proporcionalmente. Tras añadir núcleos CPU, aumenta max_parallel_workers_per_gather y 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

Replicación en streaming para escalado de lectura

La replicación en streaming integrada de PostgreSQL crea un standby activo que puede atender consultas de lectura, descargando las cargas de trabajo analíticas del primario:

# 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

Replicación lógica para replicación selectiva

La replicación lógica permite replicar tablas específicas a otra instancia de PostgreSQL, útil para pipelines de almacenamiento de datos:

-- 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;

Para aplicaciones que requieren un Servidor Dedicado para la base de datos primaria con réplicas VPS gestionando el tráfico de lectura, esta arquitectura proporciona tanto rendimiento como eficiencia de costos.

Funciones avanzadas de PostgreSQL que vale la pena habilitar

JSONB para cargas de trabajo híbridas relacionales/documentales

-- 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'));

Particionamiento de tablas para grandes conjuntos de datos

-- 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 para aplicaciones geoespaciales

# 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;

Monitorización: pila de observabilidad para PostgreSQL en producción

La resolución de problemas reactiva es insuficiente para bases de datos en producción. Una pila de observabilidad proactiva detecta la degradación antes de que se convierta en una interrupción.

Vistas de estadísticas integradas 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';

Pila 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"

Combina postgres_exporter con un panel de Grafana (el ID de panel 9628 de grafana.com cubre todas las métricas críticas de PostgreSQL) y configura alertas para: retraso de replicación superior a 30 segundos, aproximación al agotamiento del ID de transacción, ratio de aciertos de caché por debajo del 95% y recuento de tuplas muertas superior al 10% de las tuplas vivas.

Matriz de casos de uso: adaptación de la configuración de PostgreSQL a la carga de trabajo

Carga de trabajoParámetros claveExtensionesEstrategia de escalado
OLTP (e-commerce, SaaS)work_mem bajo, PgBouncer, synchronous_commit=onpg_stat_statements, pgcryptoVertical + réplicas de lectura
Analítica / OLAPwork_mem alto, workers en paralelo, synchronous_commit=offpg_partman, tablefuncParticionamiento + almacenamiento columnar
IoT de series temporalesParticionamiento por tiempo, ajuste de autovacuumTimescaleDB, pg_partmanPoda de particiones + compresión
Geoespacial / GISÍndices espaciales, effective_io_concurrencyPostGIS, pg_routingServidor dedicado para grandes conjuntos de datos
Backend API (JSON)Índices GIN en JSONB, work_mem para agregacionespg_trgm, uuid-osspRéplicas de lectura para APIs con muchas peticiones GET
Búsqueda de texto completoColumnas tsvector, índices GINpg_trgm, unaccentEscaneos solo de índice, índices parciales

Para equipos que desarrollan backends API o aplicaciones web, combinar PostgreSQL con un VPS con cPanel proporciona un panel de control gestionado junto con total flexibilidad de base de datos. Para equipos de infraestructura que prefieren la gestión por CLI, Paneles de Control VPS ofrece una selección más amplia de opciones de panel.

Lista de verificación práctica antes de implementar PostgreSQL en un VPS

Dimensionamiento del hardware:

  • Calcular shared_buffers como el 25% de la RAM total
  • Verificar el almacenamiento NVMe SSD — las escrituras WAL de PostgreSQL son sensibles a la latencia
  • Asignar al menos 2 núcleos CPU dedicados para cargas de trabajo en producción

Línea base de seguridad:

  • Vincular listen_addresses solo a privado/localhost
  • Reemplazar md5 con scram-sha-256 en pg_hba.conf
  • Habilitar SSL con TLS 1.2 como mínimo para cualquier conexión remota
  • Crear roles específicos para la aplicación — nunca usar el superusuario postgres en el código de la aplicación
  • Configurar ufw o iptables para incluir en la lista blanca solo las IPs de origen conocidas en el puerto 5432

Línea base de rendimiento:

  • Deshabilitar las páginas hugepages transparentes a nivel del sistema operativo
  • Establecer vm.swappiness=1 para evitar la paginación de los buffers compartidos
  • Instalar y configurar PgBouncer si el número de conexiones supera 50
  • Habilitar pg_stat_statements desde el primer día — la elaboración de perfiles de consultas retroactiva es imposible

Copia de seguridad y recuperación:

  • Automatizar pg_dump con cron, probar las restauraciones mensualmente
  • Implementar el archivado WAL si los requisitos de RPO son inferiores a 1 hora
  • Combinar las copias de seguridad a nivel de aplicación con los snapshots del proveedor VPS para una protección por capas

Observabilidad:

  • Implementar postgres_exporter + Prometheus + Grafana antes de la puesta en marcha
  • Configurar alertas sobre retraso de replicación, antigüedad del ID de transacción y ratio de aciertos de caché
  • Revisar pg_stat_bgwriter semanalmente para detectar presión en los checkpoints

Preguntas frecuentes

¿Qué versión de PostgreSQL debo instalar en un nuevo VPS?

Instala siempre la última versión estable principal (PostgreSQL 16 a partir de 2024) desde el repositorio oficial PGDG, no la versión incluida con tu distribución Linux. Los paquetes de distribución suelen estar 1–2 versiones principales por detrás y no reciben backports de funciones del upstream. Usa apt.postgresql.org o yum.postgresql.org para la instalación.

¿Cuánta RAM necesita realmente un VPS con PostgreSQL?

Para una aplicación de producción pequeña con menos de 50 conexiones concurrentes y un conjunto de datos inferior a 50 GB, 4 GB RAM es un mínimo práctico. Establece shared_buffers = 1GB, work_mem = 16MB y usa PgBouncer. Para conjuntos de datos que superan la RAM disponible, céntrate en la cobertura de índices y la optimización del plan de consultas antes de añadir hardware — un índice faltante en una tabla de 100 GB no se resolverá añadiendo RAM.

¿Es seguro ejecutar PostgreSQL y la aplicación en el mismo VPS?

Sí, para cargas de trabajo pequeñas y medianas. El riesgo es la contención de recursos: un pico de memoria en la aplicación puede provocar kills por OOM que terminen PostgreSQL. Mitiga esto estableciendo el oom_score_adj de PostgreSQL en un valor negativo (haciéndolo menos probable de ser eliminado) y usando cgroups para limitar el techo de memoria de la aplicación.

¿Cuál es la diferencia entre pg_dump y pg_basebackup?

pg_dump produce una copia de seguridad lógica de una sola base de datos — exporta sentencias SQL o un formato binario personalizado que puede restaurarse de forma selectiva (tablas individuales, esquemas). pg_basebackup copia el directorio de datos completo de PostgreSQL a nivel binario, produciendo una copia de seguridad completa del clúster adecuada para la recuperación ante desastres y la inicialización de servidores standby. Usa ambos: pg_dump para restauraciones granulares, pg_basebackup para escenarios de recuperación completa.

¿Cómo actualizo PostgreSQL de forma segura a una nueva versión principal en un VPS?

Usa pg_upgrade con el indicador --check primero para validar la compatibilidad sin realizar cambios. Realiza una copia de seguridad completa con pg_basebackup antes de continuar. La actualización en sí se realiza sin conexión (PostgreSQL debe estar detenido). Para actualizaciones de versiones principales sin tiempo de inactividad, usa la replicación lógica: configura una nueva instancia de PostgreSQL 16 como suscriptor lógico del primario PostgreSQL 15, deja que se ponga al día y luego realiza una transición coordinada con un tiempo de inactividad mínimo.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar