pg_ctl

pg_ctl — inicializa, inicia, para ou controla um servidor PostgreSQL

Sinopse

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]

Descriçã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.

Opções

-c
--core-files

Tenta 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
--silent

Mostra 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
--version

Mostra 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.

-?
--help

Mostra 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.

Opções para o Windows

-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 senha

Senha 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.

Variáveis de ambiente

PGCTLTIMEOUT

Limite 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.

PGDATA

Localizaçã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.

Arquivos

postmaster.pid

O 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.

Exemplos

Ativar o Servidor

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

Parar o servidor

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

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

Mostrar o status do servidor

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.

Veja também

initdb, postgres