Skip to main content

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

ArquivoCaminho
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
quais parametros de tunning sao importantes?

 

 

 

  1.  

  2.  

  3.  

  4.  

  5.  

  6.  

  7.  

  8.  

 

 


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

ParâmetroRegraSeu valor
shared_buffers25% RAM1GB
effective_cache_size75% RAM3GB
work_memRAM / max_connections / 316MB
maintenance_work_mem5-10% RAM256MB
max_connectionsCPUs × 50 (máx)100
max_parallel_workers= nº de CPUs2
random_page_costSSD=1.1 / HDD=4.01.1

Para tuning automático baseado no hardware, use o site pgtune.leopard.in.ua — informe 4GB RAM, 2 CPUs, tipo de storage e workload.