postmaster

Name

postmaster -- servidor de banco de dados multiusuário do PostgreSQL

Synopsis

postmaster [-A 0 | 1 ] [-B num_buffers] [-c nome=valor] [-d nível_de_depuração] [-D diretório_de_dados] [-F] [-h nome_do_hospedeiro] [-i] [-k diretório] [-l] [-N num_max_conexões] [-o opções_extras] [-p porta] [-S] [--nome=valor] [-n | -s]

Descrição

O postmaster é o servidor de banco de dados multiusuário do PostgreSQL. Para um aplicativo cliente acessar um banco de dados deve se conectar (através de uma rede ou localmente) a um postmaster. O postmaster então inicia um processo servidor separado ("postgres") para manter a conexão. O postmaster também gerencia a comunicação entre os processos servidores.

Por padrão, o postmaster inicia em primeiro plano (foreground) e envia as mensagens de log para a saída padrão. Na prática o postmaster deve ser iniciado como um processo em segundo plano (background), provavelmente durante a inicialização do sistema operacional.

Um postmaster gerencia sempre os dados de exatamente um agrupamento de bancos de dados. Um agrupamento de bancos de dados é uma coleção de bancos de dados que é armazenada em um local comum no sistema de arquivos. Quando o postmaster inicia necessita saber a localização dos arquivos do agrupamento de bancos de dados ("área de dados"), o que é feito através da opção de chamada -D, ou através da variável de ambiente PGDATA; não existe nenhum valor padrão. Mais de um processo postmaster pode estar executando no sistema operacional no mesmo instante, desde que utilizem áreas de dados diferentes e portas de comunicação diferentes (veja abaixo). A área de dados é criada pelo initdb.

Opções

Consulte o Guia do Administrador para ver uma discussão detalhada das opções. Pode-se evitar digitar a maior parte destas opções usando um arquivo de configuração. O postmaster aceita os seguintes argumentos de linha de comando:

-A 0|1

Ativa a verificação das assertivas de tempo de execução, o que é uma ajuda de depuração para detectar enganos de programação. Só está disponível quando é habilitada durante a compilação. Se for, o padrão é ativa.

-B num_buffers

Define o número de buffers compartilhados para uso pelos processos servidores (SHARED_BUFFERS = num_buffers). Por padrão 64 buffers, cada um de 8 kB.

-c nome=valor

Define o parâmetro de tempo de execução designado. Consulte o Guia do Administrador para obter a relação destes parâmetros e as suas descrições. A maior parte das outras opções de linha de comando são, na verdade, formas curtas de atribuição destes parâmetros. A opção -c pode aparecer várias vezes para definir vários parâmetros.

-d nível_de_depuração

Define o nível de depuração (DEBUG_LEVEL = nível_de_depuração). Quanto maior for definido este valor, mais saída de depuração será escrita no log do servidor. O padrão é 0, que significa sem depuração. Valores até 4 são úteis; números maiores não produzem nenhuma saída adicional.

-D diretório_de_dados

Especifica a localização do diretório de dados no sistema de arquivos. Veja a discussão acima.

-F

Desativa as chamadas a fsync para melhorar o desempenho, correndo o risco de corrupção dos dados na ocorrência de uma falha do sistema (FSYNC = OFF). Leia a documentação antes de usar esta opção!

-h nome_do_hospedeiro

Especifica o nome ou o endereço do hospedeiro TCP/IP no qual o postmaster vai aguardar as conexões dos aplicativos clientes (VIRTUAL_HOST = nome_do_hospedeiro). Por padrão aguarda em todos os endereços configurados (incluindo localhost).

-i

Permite os clientes se conectarem via TCP/IP (Domínio da Internet) (TCPIP_SOCKET = TRUE). Sem esta opção, somente as conexões via soquete do domínio local Unix são aceitas.

-k diretório

Especifica o diretório do soquete do domínio Unix, no qual o postmaster está aguardando as conexões dos aplicativos clientes (UNIX_SOCKET_DIRECTORY = diretório). Normalmente o padrão é /tmp, mas pode ser mudado em tempo de compilação.

-l

Ativa as conexões seguras usando SSL (SSL = TRUE). A opção -i também é requerida. Deve ter sido compilado com SSL habilitado para ser possível o uso desta opção.

-N num_max_conexões

Define o número máximo de conexões de clientes aceitas por este postmaster (MAX_CONNECTIONS = num_max_conexões). Por padrão este valor é 32, mas pode ser definido tão alto quanto o sistema operacional suportar (Observe que a opção -B deve ser pelo menos o dobro da opção -N. Veja a discussão sobre os recursos do sistema requeridos para a conexão de um grande número de clientes no Guia do Administrador).

-o opções_extras

As opções no estilo linha de comando especificadas nas opções_extras são passadas para todos os processos servidores começando por este postmaster. Consulte o postgres para ver as possibilidades. Se a cadeia de caracteres contendo a opção contiver espaços, toda a cadeia de caracteres deve vir entre apóstrofos (').

-p porta

Especifica a porta TCP/IP, ou o soquete do domínio local Unix, onde o postmaster está aguardando as conexões dos aplicativos cliente (PORT = porta). Por padrão o valor da variável de ambiente PGPORT ou, se PGPORT não estiver definida, o valor estabelecido durante a compilação (normalmente 5432). Se for especificada outra porta diferente da porta padrão, então todos os aplicativos cliente devem especificar a mesma porta usando a opção de linha de comando ou a variável de ambiente PGPORT.

-S

Especifica que o processo postmaster deve iniciar no modo silencioso, ou seja, será dissociado do terminal do usuário, iniciará seu próprio grupo de processos e redirecionará sua saída padrão e erro padrão para /dev/null.

O uso desta chave descarta toda a saída para o log, o que provavelmente não é o desejado, porque torna muito difícil a solução dos problemas. Veja abaixo uma maneira mais adequada de iniciar o postmaster em segundo plano.

--nome=valor

Define o parâmetro de tempo de execução designado; uma forma mais curta da opção -c.

Duas opções adicionais de linha de comando estão disponíveis para a depuração de problemas que fazem o servidor terminar anormalmente. Estas opções controlam o comportamento do postmaster nesta situação, e nenhuma delas foi feita para ser usada durante a operação normal.

A estratégia comum para esta situação é notificar a todos os outros servidores que eles devem terminar e, então, reinicializar a memória compartilhada e os semáforos. Isto é necessário porque um servidor errante pode ter corrompido algum estado compartilhado antes de terminar.

Estas opções caso-especial são:

-n

O postmaster não irá reinicializar as estruturas de dado compartilhadas. Um programador de sistemas com conhecimento adequado poderá, então, usar um depurador para examinar a memória compartilhada e o estado do semáforo.

-s

O postmaster irá parar todos os outros processos servidores enviando o sinal SIGSTOP, mas não irá fazê-los terminar, permitindo aos programadores de sistema coletar os "core dumps" de todos os processos servidores manualmente.

Saídas

semget: No space left on device

Se esta mensagem for recebida deve-se executar o comando ipcclean e em seguida, tentar iniciar o postmaster novamente. Se ainda assim não funcionar, provavelmente será necessário configurar o núcleo (kernel) para a memória compartilhada e os semáforos conforme descrito nas notas de instalação. Se forem executadas várias instâncias do postmaster em um único hospedeiro, ou se o núcleo tiver memória compartilhada e/ou limites de semáforo particularmente pequenos, provavelmente será necessário reconfigurar o núcleo para aumentar os parâmetros de memória compartilhada ou de semáforos.

Tip: Pode-se conseguir adiar a reconfiguração do núcleo diminuindo-se -B para reduzir o consumo de memória compartilhada do PostgreSQL, e/ou reduzindo-se -N para reduzir o consumo de semáforos.

StreamServerPort: cannot bind to port

Se esta mensagem for vista, deve-se ter certeza de que não existe nenhum outro processo postmaster executando no mesmo computador usando o mesmo número de porta. A maneira mais fácil de se ver é usando o comando

$ ps ax | grep postmaster

ou

$ ps -e | grep postmaster

dependendo do sistema operacional.

Havendo certeza de que nenhum outro processo postmaster está executando, e o erro continuar acontecendo, deve-se tentar especificar uma porta diferente usando a opção -p. É possível acontecer este erro se o postmaster for terminado e imediatamente reiniciado usando a mesma porta; neste caso deve-se simplesmente aguardar alguns segundos até que o sistema operacional feche a porta antes de tentar novamente. Finalmente, este erro pode acontecer se for especificado um número de porta que o sistema operacional considera ser reservado. Por exemplo, muitas versões do Unix consideram os números de porta abaixo de 1024 como sendo trusted (confiadas) e só permite o acesso aos superusuários do Unix.

Notas

Sempre que for possível não use o SIGKILL para terminar o postmaster. Isto impede que o postmaster libere os recursos do sistema utilizados (por exemplo, memória compartilhada e semáforos) antes de terminar.

Para terminar o postmaster normalmente, os sinais SIGTERM, SIGINT ou SIGQUIT podem ser usados. O primeiro aguarda todos os clientes terminarem antes de fechar, o segundo força a desconexão de todos os clientes e o terceiro fecha imediatamente sem um shutdown apropriado, acarretando a execução da recuperação ao reiniciar.

O comando utilitário pg_ctl pode ser usado para iniciar e terminar o postmaster com segurança e conforto.

As opções -- não funcionam no FreeBSD nem no OpenBSD. Use o -c em seu lugar. Esta é uma falha destes sistemas operacionais; uma versão futura do PostgreSQL disponibilizará uma forma de contornar este problema, caso não seja corrigido.

Utilização

Para iniciar o postmaster em segundo plano usando os valores padrão:

$ nohup postmaster >logfile 2>&1 </dev/null &

Para iniciar o postmaster usando uma porta específica:

$ postmaster -p 1234

Este comando inicia o postmaster se comunicando através da porta 1234. Para se conectar a este postmaster usando o psql, deve-se executar:

$ psql -p 1234

ou definir a variável de ambiente PGPORT:

$ export PGPORT=1234
$ psql

Parâmetros de tempo de execução nomeados podem ser definidos usando-se um destes estilos:

$ postmaster -c sort_mem=1234
$ postmaster --sort-mem=1234

As duas formas substituem o que estiver definido para sort_mem em postgresql.conf. Observe que os sublinhados nos nomes dos parâmetros podem ser escritos na linha de comando com o caractere sublinhado ou o traço (dash).

Tip: Exceto para experimentos de curta duração, é provavelmente uma prática melhor editar as definições no arquivo postgresql.conf do que depender das chaves da linha de comando para definir os parâmetros.