PostgreSQL Install
PostgreSQL Install — hexacatslab1 (Oracle Linux 8)
STEP 1 — Instalar via Oracle Linux AppStream (sem internet necessária)
# Ver versões disponíveis:
dnf module list postgresql
# Habilitar o módulo (versão 15 recomendada):
dnf module enable -y postgresql:15
# Instalar:
dnf install -y postgresql-server postgresql-contrib
# Verificar versão:
postgres --version
Se preferir a versão mais recente via repo oficial do PostgreSQL:
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm dnf module disable -y postgresql dnf install -y postgresql15-server postgresql15-contrib
STEP 2 — Inicializar o banco de dados
# Inicializar o cluster de dados:
postgresql-setup --initdb
# Verificar se criou os arquivos:
ls /var/lib/pgsql/data/
STEP 3 — Iniciar e habilitar o serviço
systemctl enable --now postgresql
# Verificar status:
systemctl status postgresql
STEP 4 — Configurar acesso
4.1 Definir senha do usuário postgres
# Entrar como usuário postgres:
sudo -u postgres psql
# Dentro do psql, definir senha:
ALTER USER postgres WITH PASSWORD 'SuaSenhaForte123!';
\q
4.2 Configurar autenticação — pg_hba.conf
vi /var/lib/pgsql/data/pg_hba.conf
Alterar as linhas de ident para md5 (ou scram-sha-256):
# TYPE DATABASE USER ADDRESS METHOD
# Local via socket:
local all all md5
# IPv4:
host all all 127.0.0.1/32 md5
# Rede interna (acesso remoto):
host all all 192.168.50.0/24 md5
4.3 Configurar escuta remota — postgresql.conf
vi /var/lib/pgsql/data/postgresql.conf
Localizar e alterar:
listen_addresses = '*' # era 'localhost'
port = 5432
4.4 Reiniciar para aplicar:
systemctl restart postgresql
systemctl status postgresql
STEP 5 — Firewall
firewall-cmd --permanent --add-service=postgresql
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reload
Se o firewalld estiver desativado, pule este step.
STEP 6 — Criar banco e usuário de aplicação
sudo -u postgres psql
-- Criar usuário:
CREATE USER appuser WITH PASSWORD 'AppSenha123!';
-- Criar banco:
CREATE DATABASE appdb OWNER appuser;
-- Conceder privilégios:
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;
-- Verificar:
\l
\du
\q
STEP 7 — Testar conexão
# Local:
psql -U postgres -h 127.0.0.1 -p 5432 -c "SELECT version();"
# Remoto (do hexacatslab2):
psql -U appuser -h 192.168.50.12 -p 5432 -d appdb -c "SELECT now();"
# Verificar porta ouvindo:
ss -tlnp | grep 5432
Admin Cheatsheet
# Status do serviço
systemctl status postgresql
# Iniciar / Parar / Reiniciar
systemctl start postgresql
systemctl stop postgresql
systemctl restart postgresql
# Acessar o psql
sudo -u postgres psql
psql -U postgres -h 127.0.0.1
# Listar bancos
\l
# Listar usuários
\du
# Conectar em um banco
\c appdb
# Listar tabelas
\dt
# Sair do psql
\q
# Ver conexões ativas
SELECT pid, usename, application_name, client_addr, state FROM pg_stat_activity;
# Ver tamanho dos bancos
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
# Logs do PostgreSQL
journalctl -u postgresql -f
tail -f /var/lib/pgsql/data/log/postgresql-*.log
Arquivos importantes
| Arquivo | Caminho |
|---|---|
| Config principal | /var/lib/pgsql/data/postgresql.conf |
| Autenticação | /var/lib/pgsql/data/pg_hba.conf |
| Dados | /var/lib/pgsql/data/ |
| Logs | /var/lib/pgsql/data/log/ |
| Binários | /usr/bin/psql, /usr/bin/pg_dump |
Admin Cheatsheet
# Status do serviço
systemctl status postgresql
# Iniciar / Parar / Reiniciar
systemctl start postgresql
systemctl stop postgresql
systemctl restart postgresql
# Acessar o psql
sudo -u postgres psql
psql -U postgres -h 127.0.0.1
# Listar bancos
\l
# Listar usuários
\du
# Conectar em um banco
\c appdb
# Listar tabelas
\dt
# Sair do psql
\q
# Ver conexões ativas
SELECT pid, usename, application_name, client_addr, state FROM pg_stat_activity;
# Ver tamanho dos bancos
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
# Logs do PostgreSQL
journalctl -u postgresql -f
tail -f /var/lib/pgsql/data/log/postgresql-*.log
Arquivos importantes
PostgreSQL Tuning — hexacatslab1 (4GB RAM / 2 CPUs)
Os valores abaixo são calculados para o seu hardware específico.
STEP 1 — Editar postgresql.conf
vi /var/lib/pgsql/data/postgresql.conf
Memória
# 25% da RAM total — principal cache do PostgreSQL
shared_buffers = 1GB
# 75% da RAM — dica ao planner sobre cache do SO
effective_cache_size = 3GB
# Por operação de sort/hash — cuidado: multiplica por conexões paralelas
# 4GB / 100 conexões / 3 operações = ~13MB, arredondado:
work_mem = 16MB
# Para VACUUM, CREATE INDEX, ALTER TABLE
maintenance_work_mem = 256MB
# Cache de catálogos do sistema
shared_memory_type = mmap
effective_io_concurrency = 100 # SSD: 200 | HDD: 2
Conexões
# Para servidor pequeno (4GB), mantenha baixo
max_connections = 100
# Pool de conexões recomendado com PgBouncer se precisar de mais
WAL (Write-Ahead Log)
wal_buffers = 16MB
wal_level = replica # mínimo para replicação futura
max_wal_size = 1GB
min_wal_size = 256MB
# Espalha o checkpoint para reduzir I/O spike
checkpoint_completion_target = 0.9
checkpoint_timeout = 10min
Paralelismo (2 CPUs)
max_worker_processes = 2
max_parallel_workers = 2
max_parallel_workers_per_gather = 1
max_parallel_maintenance_workers = 1
Query Planner
# SSD: 1.1 | HDD: 4.0
random_page_cost = 1.1
# Custo de I/O sequencial (padrão 1.0, reduzir se SSD)
seq_page_cost = 1.0
# Força uso de estatísticas mais detalhadas
default_statistics_target = 100
Autovacuum
autovacuum = on
autovacuum_max_workers = 2
autovacuum_naptime = 1min
autovacuum_vacuum_cost_delay = 2ms # padrão 20ms — mais agressivo
autovacuum_vacuum_scale_factor = 0.05 # vacuuma com 5% de linhas mortas
autovacuum_analyze_scale_factor = 0.02
Logging (para diagnóstico de performance)
log_min_duration_statement = 1000 # loga queries > 1 segundo
log_checkpoints = on
log_connections = off # on apenas para auditoria
log_disconnections = off
log_lock_waits = on
log_temp_files = 0 # loga uso de temp files
deadlock_timeout = 1s
Aplicar todas as configurações de uma vez
Cole no final do postgresql.conf (sobrescreve os valores default):
cat >> /var/lib/pgsql/data/postgresql.conf <<'EOF'
# ---- TUNING hexacatslab1 (4GB RAM / 2 CPU) ----
shared_buffers = 1GB
effective_cache_size = 3GB
work_mem = 16MB
maintenance_work_mem = 256MB
max_connections = 100
wal_buffers = 16MB
max_wal_size = 1GB
min_wal_size = 256MB
checkpoint_completion_target = 0.9
checkpoint_timeout = 10min
max_worker_processes = 2
max_parallel_workers = 2
max_parallel_workers_per_gather = 1
max_parallel_maintenance_workers = 1
random_page_cost = 1.1
effective_io_concurrency = 100
default_statistics_target = 100
autovacuum_max_workers = 2
autovacuum_vacuum_cost_delay = 2ms
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
log_min_duration_statement = 1000
log_checkpoints = on
log_lock_waits = on
log_temp_files = 0
deadlock_timeout = 1s
EOF
# Aplicar:
systemctl restart postgresql
# Verificar parâmetros ativos:
sudo -u postgres psql -c "SELECT name, setting, unit FROM pg_settings WHERE name IN ('shared_buffers','work_mem','max_connections','effective_cache_size');"
Resumo visual — regra geral
Para tuning automático baseado no hardware, use o site pgtune.leopard.in.ua — informe 4GB RAM, 2 CPUs, tipo de storage e workload.