PostgreSQL em VPS: instalação e tuning básico
O PostgreSQL é um banco de dados relacional robusto, com recursos avançados como JSONB, extensões (PostGIS, pgvector) e excelente conformidade com SQL. Veja como instalar e ajustar no seu VPS.
Instalação
Pelos repositórios da distribuição
sudo apt install postgresql -y
Versão mais recente (repositório oficial PGDG)
O PostgreSQL mantém repositórios próprios com as versões mais recentes. Siga as instruções em postgresql.org/download para sua distribuição.
Verifique:
sudo systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"
Criando usuário e banco
sudo -u postgres createuser --pwprompt app
sudo -u postgres createdb -O app appdb
Teste:
psql -h 127.0.0.1 -U app -d appdb
Autenticação (pg_hba.conf)
O arquivo pg_hba.conf (em /etc/postgresql/VERSÃO/main/ no Debian/Ubuntu) define quem pode se conectar e como. Use scram-sha-256:
# TIPO BANCO USUÁRIO ENDEREÇO MÉTODO
local all postgres peer
host appdb app 127.0.0.1/32 scram-sha-256
host appdb app ::1/128 scram-sha-256
Acesso remoto (somente se necessário)
No postgresql.conf:
listen_addresses = 'localhost,IP_PRIVADO'
No pg_hba.conf, libere apenas o IP do servidor da aplicação:
hostssl appdb app 203.0.113.20/32 scram-sha-256
E no firewall:
sudo ufw allow from 203.0.113.20 to any port 5432 proto tcp
Nunca deixe a porta 5432 aberta para toda a internet.
Tuning básico
Parâmetros no postgresql.conf (valores de exemplo para um VPS com 8 GB de RAM dedicado principalmente ao banco):
# Memória
shared_buffers = 2GB # ~25% da RAM
effective_cache_size = 6GB # ~75% da RAM (estimativa para o planejador)
work_mem = 16MB # por operação de ordenação/hash — cuidado com muitas conexões
maintenance_work_mem = 512MB # VACUUM, CREATE INDEX
# Disco NVMe
random_page_cost = 1.1 # padrão 4.0 é pensado para HDD
effective_io_concurrency = 200
# WAL e checkpoints
wal_buffers = 16MB
min_wal_size = 1GB
max_wal_size = 4GB
checkpoint_completion_target = 0.9
# Conexões
max_connections = 100
sudo systemctl restart postgresql
Ferramentas como o PGTune geram sugestões conforme RAM, vCPUs e tipo de uso. Use-as como ponto de partida.
Muitas conexões? Use um pooler
Cada conexão no PostgreSQL é um processo, com custo de memória. Aplicações com muitas conexões simultâneas se beneficiam do PgBouncer, que reaproveita um número menor de conexões reais.
Encontrando consultas lentas
Ative a extensão pg_stat_statements:
shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION pg_stat_statements;
SELECT query, calls, round(mean_exec_time::numeric, 2) AS media_ms
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
Analise com EXPLAIN (ANALYZE, BUFFERS) e crie índices adequados.
Manutenção
O autovacuum é essencial: ele remove versões antigas de linhas e atualiza estatísticas. Não o desative. Em tabelas muito movimentadas, ajuste-o por tabela.
Backups
pg_dump -Fc -U app -h 127.0.0.1 appdb > appdb-$(date +%F).dump
pg_restore -d appdb_restaurado appdb-2026-09-24.dump
Para bancos maiores e recuperação em um ponto no tempo, use pgBackRest ou Barman com arquivamento de WAL.
Conclusão
Com ajustes simples, especialmente o random_page_cost para NVMe, o PostgreSQL entrega excelente desempenho em um VPS. Hospede o seu em um VPS-NVME-BR da VittHost, com servidores no Brasil.Use o cupom SP-VITT20 e ganhe 20% de desconto na primeira fatura enquanto a promoção estiver ativa.