15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
23.10.2024

PostgreSQL em um VPS: Arquitetura, Ajuste de Desempenho e Guia de Implantação

PostgreSQL é um sistema avançado de gestão de bases de dados objeto-relacionais (ORDBMS) de código aberto que suporta consultas SQL e JSON, transações conformes com ACID e tipos de dados extensíveis. Quando implementado num Servidor Privado Virtual, obtém recursos de computação dedicados, acesso completo à configuração ao nível do kernel e isolamento de rede — capacidades que o alojamento partilhado fundamentalmente não consegue fornecer.

Para cargas de trabalho em produção, esta combinação é imediatamente relevante: um valor shared_buffers mal configurado em alojamento partilhado não tem solução, uma consulta descontrolada na instância de um vizinho pode esgotar o seu I/O, e não é possível instalar extensões como PostGIS ou pg_partman sem acesso root. Um VPS elimina as três restrições de uma só vez.

Por Que o PostgreSQL Supera Outras Opções de RDBMS de Código Aberto

Antes de examinar as vantagens específicas do VPS, vale a pena compreender o que torna o PostgreSQL o motor de eleição em detrimento do MySQL/MariaDB para cargas de trabalho complexas.

FuncionalidadePostgreSQLMySQL 8.xMariaDB 10.x
Conformidade ACIDTotal, incluindo DDLTotalTotal
Indexação JSON/JSONBJSONB nativo com índices GINJSON (sem armazenamento binário)JSON (sem armazenamento binário)
Suporte geoespacialPostGIS (padrão da indústria)Tipos espaciais limitadosTipos espaciais limitados
Pesquisa de texto completoIntegrada, configurávelÍndice FULLTEXT básicoÍndice FULLTEXT básico
Particionamento de tabelasDeclarativo, intervalo/lista/hashParticionamento suportadoParticionamento suportado
Execução paralela de consultasSim (workers configuráveis)LimitadoLimitado
Tipos de dados personalizadosSim (CREATE TYPE)NãoNão
Procedimentos armazenados (PL/pgSQL)Linguagem procedural completaBásicoBásico
Write-ahead logging (WAL)Configurável, replicação em streamingBinary logBinary log
Modelo de concorrênciaMVCC (sem bloqueios de leitura)MVCCMVCC
Replicação lógicaSim (publicação/subscrição)SimSim
Wrappers de dados externosSim (postgres_fdw, etc.)NãoNão

O modelo Multi-Version Concurrency Control (MVCC) do PostgreSQL merece menção especial: os leitores nunca bloqueiam os escritores e os escritores nunca bloqueiam os leitores. Isto é arquiteturalmente superior para cargas de trabalho mistas OLTP/OLAP, onde consultas analíticas de longa duração bloqueariam de outra forma as tabelas transacionais.

Eficiência de Custos: Alocação de Recursos Sem Sobreprovisionamento

Um plano de Alojamento VPS fornece núcleos CPU garantidos, RAM e armazenamento NVMe SSD a uma fração do custo de hardware bare-metal. A lógica económica é simples: os requisitos de memória do PostgreSQL escalam com max_connections e work_mem, não com o tamanho bruto do servidor. Um VPS com 4 GB RAM devidamente ajustado a servir 50 ligações simultâneas superará uma instância com 8 GB RAM com configurações predefinidas e 200 ligações inativas a consumir memória partilhada.

A estratégia prática de eficiência de custos é começar com um VPS de nível intermédio, analisar as métricas reais de pg_stat_activity e pg_stat_bgwriter após duas semanas de carga em produção e, em seguida, redimensionar verticalmente. Esta abordagem baseada em dados evita o erro comum de sobreprovisionamento no lançamento.

Um fator de custo frequentemente ignorado: o daemon autovacuum do PostgreSQL requer margem de CPU. Em alojamento partilhado, o autovacuum é frequentemente limitado pelo fornecedor, causando inchaço de tabelas e planos de consulta degradados ao longo do tempo. Num VPS, controla autovacuum_vacuum_cost_delay e autovacuum_max_workers diretamente.

Acesso Root Completo e Controlo do Ambiente

Ao contrário dos serviços de bases de dados geridos ou do Alojamento Web Partilhado, um VPS dá-lhe acesso irrestrito à camada do sistema operativo. Isto não é meramente uma conveniência — é um requisito obrigatório para várias capacidades do PostgreSQL.

O que o acesso root permite que os ambientes partilhados bloqueiam:

  • Instalação de extensões PostgreSQL (CREATE EXTENSION postgis, CREATE EXTENSION pg_trgm, CREATE EXTENSION timescaledb)
  • Modificação de parâmetros do kernel que afetam diretamente o desempenho do PostgreSQL (vm.overcommit_memory, vm.swappiness, huge_pages)
  • Configuração de pg_hba.conf com métodos de autenticação personalizados (SCRAM-SHA-256, LDAP, autenticação baseada em certificados)
  • Execução de pg_upgrade para migrações de versões principais sem intervenção do fornecedor
  • Montagem de volumes de tablespace dedicados em dispositivos de bloco separados para separação de I/O entre índices e ficheiros heap

Ajuste crítico do kernel para PostgreSQL em 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 configurações são invisíveis para serviços de bases de dados geridos ao nível da aplicação e são frequentemente a causa raiz de degradação de desempenho inexplicável em instâncias PostgreSQL alojadas na cloud.

Ajuste de Desempenho: Os Parâmetros postgresql.conf Que Realmente Importam

Os parâmetros de instalação predefinidos do PostgreSQL são intencionalmente conservadores — foram concebidos para funcionar numa máquina com 256 MB RAM do início dos anos 2000. Num VPS moderno com 4–16 GB RAM e armazenamento NVMe, as predefinições deixam a maioria das capacidades de hardware por utilizar.

Configuração de Memória

# 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

A armadilha do work_mem: Definir work_mem = 256MB com max_connections = 100 significa que o PostgreSQL poderia teoricamente alocar 25,6 GB de RAM apenas para operações de ordenação — muito além da memória física e desencadeando kills OOM. Calcule sempre work_mem como: (available_RAM - shared_buffers) / (max_connections * 2).

Configuração de Armazenamento e 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

Gestão de Ligações

# 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

O PgBouncer não é opcional para aplicações com mais de 50 utilizadores simultâneos. Cada processo backend do PostgreSQL consome aproximadamente 5–10 MB de RAM. Com 200 ligações, isso representa 1–2 GB consumidos por processos inativos. O PgBouncer em modo de pooling de transações multiplexa centenas de ligações de aplicações num pequeno conjunto de backends PostgreSQL reais.

# 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

Reforço de Segurança: Para Além da Instalação Predefinida

Uma instalação PostgreSQL recente num VPS tem várias lacunas de segurança que devem ser corrigidas antes de a instância ser acessível a partir da rede.

Isolamento ao Nível da Rede

O PostgreSQL nunca deve escutar num IP público a menos que seja absolutamente necessário. Vincule-o ao localhost e utilize tunelamento SSH ou uma VPN para administração 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'

Configure pg_hba.conf para impor autenticação SCRAM-SHA-256 (o md5 predefinido é criptograficamente fraco):

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

Encriptação SSL/TLS para Ligações Remotas

Se o seu servidor de aplicações se ligar ao PostgreSQL através de uma rede, encriptar a ligação é obrigatório. Combine isto com um Certificado SSL para a sua camada de aplicação e configure a própria pilha TLS do 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'

Controlo de Acesso Baseado em Funções

O princípio do menor privilégio aplica-se estritamente às funções da base de dados:

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

Regras 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

Arquitetura de Backup e Recuperação

O PostgreSQL fornece dois mecanismos de backup fundamentalmente diferentes, cada um adequado a diferentes objetivos de recuperação.

Método de BackupFerramentaTipo de RecuperaçãoRPORTOCaso de Uso
Backup lógicopg_dump / pg_dumpallRestauro ao nível de objetosHorasMédioMigrações de esquemas, restauro seletivo de tabelas
Backup físicopg_basebackupRestauro completo do clusterMinutos (com WAL)RápidoRecuperação de desastres, criação de standby
Arquivamento contínuoArquivamento WAL + pg_basebackupRecuperação para um ponto no tempoSegundosDepende do volume WALRequisito de zero perda de dados
SnapshotSnapshot do fornecedor VPSRestauro completo do servidorNo momento do snapshotRápidoRede de segurança pré-atualização

Backup lógico com compressão:

# 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

Backup físico para recuperação de 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 com 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

Escalabilidade: Vertical, Horizontal e Escalamento de Leitura

Escalamento Vertical

Num VPS, o escalamento vertical (adição de CPU, RAM, armazenamento) é tipicamente uma operação a quente ou requer apenas um breve reinício. Após atualizar a RAM, atualize shared_buffers, effective_cache_size e work_mem proporcionalmente. Após adicionar núcleos CPU, aumente max_parallel_workers_per_gather e 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

Replicação em Streaming para Escalamento de Leitura

A replicação em streaming integrada do PostgreSQL cria um standby ativo que pode servir consultas de leitura, descarregando cargas de trabalho analíticas do primário:

# 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

Replicação Lógica para Replicação Seletiva

A replicação lógica permite replicar tabelas específicas para outra instância PostgreSQL, útil para pipelines de data warehousing:

-- 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 aplicações que requerem um Servidor Dedicado para a base de dados primária com réplicas VPS a gerir o tráfego de leitura, esta arquitetura proporciona tanto desempenho como eficiência de custos.

Funcionalidades Avançadas do PostgreSQL que Vale a Pena Ativar

JSONB para Cargas de Trabalho Híbridas Relacionais/Documentais

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

Particionamento de Tabelas para Grandes Conjuntos de Dados

-- 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 Aplicações Geoespaciais

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

Monitorização: Pilha de Observabilidade para PostgreSQL em Produção

A resolução de problemas reativa é insuficiente para bases de dados em produção. Uma pilha de observabilidade proativa deteta a degradação antes que se torne uma interrupção.

Vistas de Estatísticas Integradas do 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';

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

Combine postgres_exporter com um dashboard Grafana (o ID de dashboard 9628 do grafana.com cobre todas as métricas críticas do PostgreSQL) e configure alertas para: atraso de replicação superior a 30 segundos, aproximação do wraparound do ID de transação, rácio de acertos na cache a cair abaixo de 95% e contagem de tuplos mortos a exceder 10% dos tuplos vivos.

Matriz de Casos de Uso: Adequar a Configuração do PostgreSQL à Carga de Trabalho

Carga de TrabalhoParâmetros PrincipaisExtensõesEstratégia de Escalamento
OLTP (e-commerce, SaaS)work_mem baixo, PgBouncer, synchronous_commit=onpg_stat_statements, pgcryptoVertical + réplicas de leitura
Análise / OLAPwork_mem alto, workers paralelos, synchronous_commit=offpg_partman, tablefuncParticionamento + armazenamento colunar
IoT de séries temporaisParticionamento por tempo, ajuste de autovacuumTimescaleDB, pg_partmanPoda de partições + compressão
Geoespacial / GISÍndices espaciais, effective_io_concurrencyPostGIS, pg_routingServidor dedicado para grandes conjuntos de dados
Backend API (JSON)Índices GIN em JSONB, work_mem para agregaçõespg_trgm, uuid-osspRéplicas de leitura para APIs com muitos GET
Pesquisa de texto completoColunas tsvector, índices GINpg_trgm, unaccentPesquisas apenas por índice, índices parciais

Para equipas que desenvolvem backends API ou aplicações web, combinar o PostgreSQL com um VPS com cPanel fornece um painel de controlo gerido juntamente com total flexibilidade de base de dados. Para equipas de infraestrutura que preferem gestão via CLI, Painéis de Controlo VPS oferece uma seleção mais ampla de opções de painéis.

Lista de Verificação Prática Antes de Implementar PostgreSQL num VPS

Dimensionamento de hardware:

  • Calcule shared_buffers como 25% da RAM total
  • Verifique o armazenamento NVMe SSD — as escritas WAL do PostgreSQL são sensíveis à latência
  • Aloque pelo menos 2 núcleos CPU dedicados para cargas de trabalho em produção

Linha de base de segurança:

  • Vincule listen_addresses apenas a privado/localhost
  • Substitua md5 por scram-sha-256 em pg_hba.conf
  • Ative SSL com TLS 1.2 mínimo para quaisquer ligações remotas
  • Crie funções específicas para aplicações — nunca utilize o superutilizador postgres no código da aplicação
  • Configure ufw ou iptables para incluir na lista branca apenas IPs de origem conhecidos na porta 5432

Linha de base de desempenho:

  • Desative transparent huge pages ao nível do SO
  • Defina vm.swappiness=1 para evitar paginação de buffers partilhados
  • Instale e configure o PgBouncer se a contagem de ligações exceder 50
  • Ative pg_stat_statements desde o primeiro dia — a análise retroativa de consultas é impossível

Backup e recuperação:

  • Automatize pg_dump com cron, teste os restauros mensalmente
  • Implemente arquivamento WAL se os requisitos de RPO forem inferiores a 1 hora
  • Combine backups ao nível da aplicação com snapshots do fornecedor VPS para proteção em camadas

Observabilidade:

  • Implemente postgres_exporter + Prometheus + Grafana antes da entrada em produção
  • Configure alertas para atraso de replicação, idade do ID de transação e rácio de acertos na cache
  • Reveja pg_stat_bgwriter semanalmente para detetar pressão nos checkpoints

FAQ

Que versão do PostgreSQL devo instalar num novo VPS?

Instale sempre a versão estável principal mais recente (PostgreSQL 16 em 2024) a partir do repositório oficial PGDG, não a versão incluída na sua distribuição Linux. Os pacotes de distribuição estão frequentemente 1–2 versões principais atrás e não recebem backports de funcionalidades upstream. Utilize apt.postgresql.org ou yum.postgresql.org para a instalação.

Quanta RAM precisa realmente um VPS PostgreSQL?

Para uma pequena aplicação em produção com menos de 50 ligações simultâneas e um conjunto de dados inferior a 50 GB, 4 GB RAM é um mínimo prático. Defina shared_buffers = 1GB, work_mem = 16MB e utilize PgBouncer. Para conjuntos de dados que excedam a RAM disponível, concentre-se na cobertura de índices e na otimização do plano de consultas antes de adicionar hardware — um índice em falta numa tabela de 100 GB não será resolvido adicionando RAM.

É seguro executar o PostgreSQL e a aplicação no mesmo VPS?

Sim, para cargas de trabalho pequenas a médias. O risco é a contenção de recursos: um pico de memória na aplicação pode desencadear kills OOM que terminam o PostgreSQL. Mitigue isto definindo o oom_score_adj do PostgreSQL para um valor negativo (tornando-o menos provável de ser eliminado) e utilizando cgroups para limitar o teto de memória da aplicação.

Qual é a diferença entre pg_dump e pg_basebackup?

pg_dump produz um backup lógico de uma única base de dados — exporta instruções SQL ou um formato binário personalizado que pode ser restaurado seletivamente (tabelas individuais, esquemas). pg_basebackup copia todo o diretório de dados do PostgreSQL ao nível binário, produzindo um backup completo do cluster adequado para recuperação de desastres e inicialização de servidores standby. Utilize ambos: pg_dump para restauros granulares, pg_basebackup para cenários de recuperação completa.

Como faço a atualização segura do PostgreSQL para uma nova versão principal num VPS?

Utilize pg_upgrade com o sinalizador --check primeiro para validar a compatibilidade sem efetuar alterações. Faça um pg_basebackup completo antes de prosseguir. A própria atualização é realizada offline (o PostgreSQL deve ser parado). Para atualizações de versões principais sem tempo de inatividade, utilize replicação lógica: configure uma nova instância PostgreSQL 16 como subscritor lógico do primário PostgreSQL 15, deixe-a alcançar o estado atual e, em seguida, realize uma transição coordenada com tempo de inatividade mínimo.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar