pg_ctl — inicializa, inicia, para ou controla um servidor PostgreSQL
pg_ctl init[db] [-D diretório_de_dados] [-s] [-o opções_do_initdb]
pg_ctl start [-D diretório_de_dados] [-l nome_do_arquivo] [-W] [-t segundos] [-s] [-o opções] [-p caminho] [-c]
pg_ctl stop [-D diretório_de_dados] [-m
s[mart] | f[ast] | i[mmediate]
] [-W] [-t segundos] [-s]
pg_ctl restart [-D diretório_de_dados] [-m
s[mart] | f[ast] | i[mmediate]
] [-W] [-t segundos] [-s] [-o opções] [-c]
pg_ctl reload [-D diretório_de_dados] [-s]
pg_ctl status [-D diretório_de_dados]
pg_ctl promote [-D diretório_de_dados] [-W] [-t segundos] [-s]
pg_ctl logrotate [-D diretório_de_dados] [-s]
pg_ctl kill nome_do_sinal id_processo
No Microsoft Windows, também:
pg_ctl register [-D diretório_de_dados] [-N nome_do_serviço] [-U nome_do_usuário] [-P senha] [-S
a[uto] | d[emand]
] [-e fonte] [-W] [-t segundos] [-s] [-o opções]
pg_ctl unregister [-N nome_do_serviço]
O pg_ctl é um utilitário para inicializar um agrupamento de bancos de dados do PostgreSQL, iniciar, parar ou reiniciar o servidor de banco de dados PostgreSQL (postgres), ou mostrar o status de um servidor em execução. Embora o servidor possa ser iniciado manualmente, o pg_ctl encapsula tarefas como redirecionar a saída do registro de transações (log), e desanexar adequadamente do terminal e do grupo de processos. Também oferece opções convenientes para uma paralisação controlada.
O modo init ou initdb cria um novo
agrupamento de bancos de dados do PostgreSQL,
ou seja, uma coleção de bancos de dados gerenciados por uma única
instância do servidor.
Este modo chama o comando initdb.
Veja initdb para obter detalhes.
O modo start inicia um servidor.
O servidor é iniciado em segundo plano, e sua entrada padrão é
anexada a /dev/null (ou nul,
no Windows).
Em sistemas do tipo Unix,
por padrão, as saídas padrão (STDOUT) e de erro
padrão (STDERR) do servidor são enviadas para a
saída padrão do pg_ctl
(e não para a saída de erro padrão).
A saída padrão do pg_ctl deverá então ser
redirecionada para um arquivo, ou canalizada para outro processo,
como um programa de rotação de registro de transações, como o
rotatelogs;
caso contrário, o postgres irá escrever sua saída
no terminal de controle (do segundo plano), não se desligando do
grupo de processos do interpretador de comandos
(shell).
No Windows, por padrão, as
saídas padrão e de erro padrão do servidor são enviadas para o terminal.
Estes comportamentos padrão podem ser alterados usando a opção
-l para anexar a saída do servidor a um arquivo de
registro de transações.
O uso da opção -l, ou o redirecionamento da saída,
é recomendado.
O modo stop para o servidor que está sendo executado
no diretório de dados especificado.
Podem ser selecionados três métodos diferentes de paralisação usando
a opção -m.
O modo “Smart” (inteligente) impede novas conexões e,
em seguida, aguarda que todos os clientes se desconectem.
Se o servidor estiver em modo de espera ativa, a recuperação e a
replicação por fluxo serão encerradas assim que todos os clientes
se desconectarem.
O modo “Fast” (rápido) (o padrão) não espera que os
clientes se desconectem.
Todas as transações ativas são desfeitas, os clientes são
desconectados à força e, em seguida, o servidor é parado.
O modo “Immediate” (imediato) interrompe todos os
processos do servidor imediatamente, sem realizar uma paralisação limpa.
Esta escolha levará a um ciclo de recuperação de falha durante
a próxima ativação do servidor.
O modo restart efetivamente executa uma paralisação
seguida de um início.
Permite alterar as opções de linha de comando do
postgres, ou alterar as opções do arquivo de
configuração que não podem ser alteradas sem reiniciar o servidor.
Se foram usados caminhos relativos na linha de comando durante a
ativação do servidor, o restart poderá falhar,
a menos que o pg_ctl seja executado no
mesmo diretório onde se encontrava durante a ativação do servidor.
O modo reload (recarga) simplesmente envia ao
processo servidor do postgres o sinal
SIGHUP, fazendo com que este leia novamente
seus arquivos de configuração (postgresql.conf,
pg_hba.conf, etc.).
Permite alterar as opções do arquivo de configuração que não requerem
um reinício completo do servidor para entrar em vigor.
O modo status verifica se algum servidor está sendo
executado no diretório de dados especificado.
Se estiver, serão mostrados o PID do servidor,
e as opções de linha de comando usadas para chamá-lo.
Se o servidor não estiver em execução, o
pg_ctl irá retornar um status de saída
igual a 3.
Se não for especificado um diretório de dados acessível, o
pg_ctl irá retornar um status de saída
igual a 4.
O modo promote (promover) comanda o servidor
em espera, que está em execução no diretório de dados especificado,
para encerrar o modo de espera e iniciar as operações de
leitura/escrita.
O modo logrotate efetua uma rotação no arquivo
de registro de transações do servidor.
Para obter detalhes sobre como usar este modo com ferramentas externas
de rotação do registro de transações, veja
Manutenção de arquivo de registro.
O modo kill envia um sinal para o processo especificado.
Serve principalmente para o
Microsoft Windows, que não
possui o comando kill nativo.
Deve ser usado --help para ver a lista de nomes
de sinais com suporte.
O modo register registra o servidor
PostgreSQL como um serviço do sistema no
Microsoft Windows.
A opção -S permite a seleção do tipo de início do
serviço, seja “auto” (inicia o serviço automaticamente
na carga do sistema operacional), ou “demand”
(inicia o serviço sob demanda).
O modo unregister remove o registro do serviço do
sistema no Microsoft Windows.
Desfaz os efeitos do comando register.
-c--core-filesTenta permitir que falhas do servidor produzam despejos do núcleo, em plataformas onde isto é possível, aumentando qualquer limite flexível de recursos alocado em despejos do núcleo. Serve para depurar ou diagnosticar problemas, permitindo que seja obtido um rastreamento da pilha de um processo servidor com falha.
-D diretório_de_dados--pgdata=diretório_de_dados
Especifica o local dos arquivos de configuração do banco de
dados no sistema de arquivos.
Se esta opção for omitida, será usada a variável de ambiente
PGDATA.
-l nome_do_arquivo--log=nome_do_arquivo
Anexa a saída do registro de transações do servidor ao
nome_do_arquivo.
Se o arquivo não existir, será criado.
O umask é definido como
077, portanto, o acesso ao arquivo de
registro de transações não será permitido aos outros usuários
por padrão.
-m modo--mode=modo
Especifica o modo de paralisação.
O modo pode ser smart,
fast ou immediate,
ou a primeira letra de um desses três.
Se esta opção for omitida, fast será o padrão.
-o opções--options=opções
Especifica as opções a serem passadas diretamente para o comando
postgres.
Pode ser especificado -o várias vezes, com
todas as opções fornecidas sendo passadas.
As opções geralmente devem ser
colocadas entre aspas ou apóstrofos, para garantir que sejam
passadas como um grupo.
-o opções_do_initdb--options=opções_do_initdb
Especifica as opções a serem passadas diretamente para o comando
initdb.
Pode ser especificado -o várias vezes, com
todas as opções fornecidas sendo passadas.
As opções_do_initdb geralmente devem
ser colocadas entre aspas ou apóstrofos, para garantir que
sejam passadas como um grupo.
-p caminho
Especifica a localização do executável postgres.
Por padrão, o executável postgres é encontrado
no mesmo diretório que o pg_ctl ou, na falta
desse, do diretório de instalação.
Não é necessário usar esta opção, a menos que se esteja fazendo
algo incomum, e se receba erros informando que o executável
postgres não foi encontrado.
No modo init, esta opção especifica, de forma
análoga, a localização do executável initdb.
-s--silentMostra somente os erros, sem mensagens informativas.
-t segundos--timeout=segundos
Especifica o número máximo de segundos em espera, ao aguardar
pela conclusão de uma operação (veja a opção -w).
O padrão é o valor da variável de ambiente
PGCTLTIMEOUT ou, se não estiver definida, 60 segundos.
-V--versionMostra a versão do pg_ctl, e termina.
-w--wait
Aguarda a conclusão da operação.
Tem suporte para os modos start,
stop, restart,
promote, e register,
sendo o padrão para estes modos.
Enquanto espera, o pg_ctl verifica repetidamente
o arquivo PID do servidor, dormindo por um
curto período de tempo entre as verificações.
O início é considerado concluído quando o arquivo
PID indica que o servidor está pronto para
aceitar conexões.
A paralisação é considerada completa quando o servidor remove o
arquivo PID.
O pg_ctl retorna um código de saída com base
no sucesso do início ou da paralisação.
Se a operação não for concluída dentro do tempo limite
(veja a opção -t), o pg_ctl
sairá com um status de saída diferente de zero.
Mas note-se que a operação pode continuar em segundo
plano e, por fim, ser bem-sucedida.
-W--no-wait
Não espera que a operação seja concluída.
É o oposto da opção -w.
Se a espera estiver desativada, a ação solicitada é disparada, mas não há retorno sobre seu sucesso. Neste caso, o arquivo de registro de transações do servidor, ou um sistema de monitoramento externo, teria que ser usado para verificar o andamento e o sucesso da operação.
Nas versões anteriores do PostgreSQL,
este era o padrão, exceto para o modo stop.
-?--helpMostra a ajuda sobre os argumentos da linha de comando do pg_ctl, e termina.
Se for especificada uma opção válida, mas não relevante para o modo de operação selecionado, o pg_ctl irá ignorá-la.
-e fonte
Nome da origem do evento a ser utilizada pelo
pg_ctl para registrar eventos ao
executar como um serviço do
Windows.
O padrão é PostgreSQL.
Note que esta opção controla apenas as mensagens enviadas pelo
próprio pg_ctl;
uma vez ativado, o servidor usará a origem de evento especificada
por seu parâmetro event_source.
Caso o servidor falhe muito cedo na ativação, antes que este
parâmetro tenha sido definido, este também poderá registrar o
evento usando o nome da origem de evento padrão
PostgreSQL.
-N nome_do_serviço
Nome do serviço do sistema a ser registrado.
Este nome será usado como o nome do serviço e o nome de exibição.
O padrão é PostgreSQL.
-P senhaSenha do usuário que executa o serviço.
-S tipo_de_início
Tipo de início do serviço do sistema.
O tipo_de_início pode ser
auto, ou demand,
ou a primeira letra de um desses dois.
Se esta opção for omitida, auto será o padrão.
-U nome_do_usuário
Nome do usuário que executará o serviço.
Para usuários de domínio, deve ser usado o formato
DOMÍNIO\nome_do_usuário.
PGCTLTIMEOUTLimite padrão do número de segundos de espera ao aguardar a conclusão da ativação ou paralisação. Se não estiver definida, o padrão será 60 segundos.
PGDATALocalização padrão do diretório de dados.
A maioria dos modos do pg_ctl requer o
conhecimento da localização do diretório de dados;
portanto, a opção -D é necessária,
a menos que PGDATA esteja definida.
Para variáveis adicionais que afetam o servidor, veja postgres.
postmaster.pidO pg_ctl examina este arquivo no diretório de dados para determinar se o servidor está em execução no momento.
postmaster.opts
Se este arquivo existir no diretório de dados, o
pg_ctl (no modo restart)
passará o conteúdo do arquivo como opções para o
postgres, a menos que seja mudado pela
opção -o.
O conteúdo desse arquivo também é mostrado no modo
status.
Para ativar o servidor, aguardando até que o servidor esteja aceitando conexões, use:
$ pg_ctl start # ou no Debian 12 (N. T.) $ sudo systemctl start postgresql@18-main
Para ativar o servidor usando a porta 5433, e executando sem
fsync, use:
$ pg_ctl -o "-F -p 5433" start
Para parar o servidor, use:
$ pg_ctl stop # ou no Debian 12 (N. T.) $ sudo systemctl stop postgresql@18-main
A opção -m permite controlar
como o servidor para:
$ pg_ctl stop -m smart
Reiniciar o servidor é quase equivalente a parar o servidor e
iniciá-lo novamente, exceto que, por padrão, o
pg_ctl salva e reutiliza as opções de linha de
comando passadas para a instância em execução anteriormente.
Para reiniciar o servidor usando as mesmas opções de antes, use:
$ pg_ctl restart # ou no Debian 12 (N. T.) $ sudo systemctl restart postgresql@18-main
Mas se for especificado -o, esta opção irá
substituir qualquer opção anterior.
Para reiniciar usando a porta 5433, desativando
fsync ao reiniciar, use:
$ pg_ctl -o "-F -p 5433" restart
A seguir está uma saída de status do pg_ctl:
$ sudo su - postgres
$ /usr/lib/postgresql/18/bin/pg_ctl status -D /var/lib/postgresql/18/main/
pg_ctl: servidor está executando (PID: 8700)
/usr/lib/postgresql/18/bin/postgres \
"-D" "/var/lib/postgresql/18/main" \
"-c" "config_file=/etc/postgresql/18/main/postgresql.conf"
A segunda linha (quebrada pelo caractere \) é a linha de comando que será executada no modo de reinício.