Contextos de Configuração no PostgreSQL: Quais parametros precisam do restart do Postgres.
- Sandro Servino
- 7 de mar.
- 2 min de leitura
M.Sc, MBA, Database´s Administrator and Architect
March 7, 2025
O PostgreSQL oferece diversas configurações que controlam seu funcionamento. No entanto, nem todas podem ser alteradas da mesma forma ou entram em vigor imediatamente. O contexto de cada parâmetro em pg_settings define quando e como as mudanças podem ser aplicadas.
Este artigo explica os diferentes contextos e como aplicá-los corretamente.
📌 O que são os contextos de pg_settings?
Cada parâmetro de configuração do PostgreSQL pertence a um contexto, que determina quando a alteração será efetivada. Para listar os contextos existentes, execute:
SELECT DISTINCT context FROM pg_settings;
Os contextos possíveis são:
postmaster
superuser-backend
user
internal
backend
sighup
superuser
Abaixo, detalho cada um deles.
🔴 postmaster (Requer reinicialização do PostgreSQL)
O que significa? Os parâmetros nesse contexto exigem uma reinicialização completa do PostgreSQL para entrarem em vigor.
Como aplicar a mudança?
Edite postgresql.conf ou use ALTER SYSTEM.
Reinicie o PostgreSQL com:
Exemplos de parâmetros:
shared_buffers (buffer de memória compartilhado)
max_connections (número máximo de conexões simultâneas)
wal_level (nível de log para replicação)
listen_addresses (endereços IP onde o PostgreSQL escuta)
🟡 superuser-backend (Apenas para superusuários e na inicialização da sessão)
O que significa? Somente superusuários podem modificar, e a alteração é aplicada quando a sessão inicia.
Como aplicar a mudança?
Feche e reabra a conexão.
Exemplos de parâmetros:
session_replication_role (define se a sessão replica alterações)
vacuum_cost_delay (limita o consumo de CPU pelo autovacuum)
🔵 user (Pode ser alterado dentro da sessão do usuário)
O que significa? Qualquer usuário pode alterar esses parâmetros dentro da própria sessão. A mudança desaparece ao desconectar.
Como aplicar a mudança?
Usar SET dentro da sessão:
SET work_mem = '64MB';
Para tornar permanente:
ALTER ROLE meu_usuario SET work_mem = '64MB';
Exemplos de parâmetros:
work_mem (memória para operações temporárias)
search_path (ordem de busca de esquemas)
⚪ internal (Somente PostgreSQL pode modificar)
O que significa? Parâmetros gerenciados internamente pelo PostgreSQL. Não podem ser alterados manualmente.
Exemplos de parâmetros:
block_size (tamanho do bloco de disco)
max_function_args (máximo de argumentos em funções)
🟠 backend (Aplica-se apenas na inicialização de um processo backend)
O que significa? A mudança é aplicada quando uma nova conexão é criada.
Como aplicar a mudança?
Fechar e reabrir a conexão.
Exemplos de parâmetros:
log_statement (define o nível de log das queries)
debug_print_plan (ativa a impressão dos planos de execução)
🟢 sighup (Recarrega a configuração sem reiniciar o PostgreSQL)
O que significa? As mudanças não precisam de restart, apenas um reload da configuração.
Como aplicar a mudança?
SELECT pg_reload_conf();
Exemplos de parâmetros:
log_min_duration_statement (queries lentas para logging)
log_directory (pasta de logs)
autovacuum (liga/desliga o autovacuum)
🟣 superuser (Apenas superusuários podem alterar)
O que significa? Apenas superusuários podem modificar, mas a mudança entra em vigor imediatamente.
Como aplicar a mudança?
SET enable_seqscan = OFF;
ou tornando permanente:
ALTER DATABASE meu_banco SET enable_seqscan = OFF;
Exemplos de parâmetros:
enable_seqscan (ativa/desativa busca sequencial)
allow_system_table_mods (permite alterações em tabelas do sistema)
Com este comando verá as options existentes e seus contextos:
SELECT name, setting, context
FROM pg_settings
ORDER BY context;
e se quiser focar e verificar apenas as options que precisa do restart do postgres, quando tiver duvidas:
SELECT name, setting, context
FROM pg_settings
WHERE context = 'postmaster'
ORDER BY name;
Abraco
Sandro Servino
Comments