Tutoriais

PostgreSQL em VPS: instalação e tuning básico

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.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS