O postgres é o servidor de banco de dados PostgreSQL. Para um aplicativo cliente acessar o banco de dados, este aplicativo deve se conectar (através da rede ou localmente) a um processo postgres ativo. A instância do postgres, então, inicia um processo servidor em separado para tratar a conexão.
Uma instância do postgres 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 armazenados em um local comum no sistema de arquivos (a "área de dados"). Podem estar executando no sistema operacional ao mesmo tempo mais de um processo postgres, desde que utilizem áreas de dados diferentes e portas de comunicação diferentes (veja abaixo).
Ao iniciar, o postgres precisa saber onde está a área de dados. O local deve ser especificado pela opção -D, ou por meio da variável de ambiente PGDATA; não existe nenhum valor padrão. Normalmente -D ou PGDATA apontam diretamente para o diretório da área de dados criada pelo initdb. Outras disposições de arquivo possíveis estão discutidas na Seção 17.2. A área de dados é criada pelo utilitário initdb.
Por padrão o postgres inicia em primeiro plano e envia as mensagens de registro (log) para o fluxo de erro padrão. Para finalidades práticas o postgres deve ser iniciado como um processo em segundo plano, possivelmente durante a carga do sistema operacional.
O postgres também pode ser executado no modo monousuário. O uso principal deste modo é durante a preparação do agrupamento de bancos de dados pelo initdb. Algumas vezes é utilizado para depuração e para recuperação de desastre. Quando chamado no modo interativo a partir do interpretador de comandos, o usuário pode entrar com comandos e os resultados são mostrados na tela, mas numa forma que é mais útil para os desenvolvedores que para os usuários finais. Porém, deve ser observado que executar o servidor no modo monousuário não é inteiramente adequado para depurar o servidor, uma vez que não acontecerão comunicações entre processos nem bloqueios realísticos. Quando se executa o servidor no modo monousuário, o usuário da sessão é sempre definido como o usuário com o identificador número 1. Na realidade este usuário não precisa existir, portanto o servidor no modo monousuário pode ser utilizado para recuperação manual de certos tipos de danos acidentais aos catálogos do sistema. No modo monousuário são concedidos poderes implícitos de superusuário ao usuário com o identificador número 1.
O postgres aceita os argumentos de linha de comando mostrados a seguir. Para obter detalhes deve ser consultada o Capítulo 17. Pode-se evitar a digitação da maioria desta opções definindo um arquivo de configuração. Também podem ser definidas algumas opções (seguras) a partir do cliente que se conecta, de uma forma dependente do aplicativo, aplicadas apenas para a sessão. Por exemplo, se a variável de ambiente PGOPTIONS estiver definida, então os clientes baseados na biblioteca libpq passarão esta cadeia de caracteres para o servidor, que irá interpretá-la como opções de linha de comando do postgres.
Ativa a verificação das asserções [1] em tempo de execução, o que é uma ajuda de depuração para detectar erros de programação. Esta opção somente estará disponível se as asserções foram ativadas quando o PostgreSQL foi compilado. Se for o caso, o padrão é ativa.
Define o número de buffers compartilhados para uso pelos processos servidor. O valor padrão deste parâmetro é escolhido automaticamente pelo initdb; para obter informações adicionais deve ser consultada a Seção 17.4.1.
Define o parâmetro em tempo de execução designado. Os parâmetros de configuração suportados pelo PostgreSQL estão descritos no Capítulo 17. 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.
Define o nível de depuração. Quanto mais alto for definido este valor, mais saída de depuração será escrita no log do servidor. Os valores vão de 1 a 5. Também é possível passar -d 0 para uma determinada sessão, impedindo que o nível de log do postgres seja propagado para esta sessão.
Especifica o local do diretório de dados e dos arquivos de configuração no sistema de arquivos. Para obter detalhes deve ser consultada a Seção 17.2.
Define o estilo da data padrão como "European", ou seja, a ordem DMY para os campos de entrada da data. Também faz o dia aparecer antes do mês em certos formatos de saída. Para obter mais informações deve ser consultada a Seção 8.5.
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. Especificar esta opção equivale a desativar o parâmetro de configuração fsync. Leia com atenção a documentação antes de usar esta opção!
--fsync=true produz o efeito oposto desta opção.
Especifica o nome de hospedeiro ou endereço de IP no qual o postgres deve ouvir as conexões TCP/IP dos aplicativos cliente. O valor também pode ser uma lista de endereços separados por vírgula, ou * para especificar que deve ouvir em todas as interfaces disponíveis. Um valor vazio especifica não ouvir em nenhum endereço de IP e, neste caso, somente podem ser usados soquetes do domínio Unix para se conectar ao postgres. Por padrão ouve somente o localhost. Especificar esta opção equivale a definir o parâmetro de configuração listen_addresses.
Permite os clientes remotos se conectarem via TCP/IP (Domínio da Internet). Sem esta opção somente são aceitas as conexões locais. Esta opção equivale a definir listen_addresses como * no arquivo de configuração postgresql.conf, ou usar -h.
Esta opção está em obsolescência, uma vez que não permite acesso a todas as funcionalidades de listen_addresses. Geralmente é melhor definir listen_addresses diretamente.
Especifica o diretório do soquete do domínio Unix onde o postgres está ouvindo as conexões dos aplicativos cliente. Normalmente o padrão é /tmp, mas pode ser mudado em tempo de construção.
Ativa as conexões seguras usando SSL. O PostgreSQL deve ter sido compilado com suporte a SSL para esta opção estar disponível. Para obter informações adicionais sobre o uso do SSL, deve ser consultada a Seção 16.7.
Define o número máximo de conexões de clientes aceitas por este postgres. Por padrão este valor é 32, mas pode ser definido tão alto quanto o sistema operacional suportar (Deve ser observado que o valor da opção -B deve ser pelo menos o dobro do valor da opção -N. Veja na Seção 16.4 a discussão sobre os requisitos de recursos do sistema necessários para a conexão de um grande número de clientes). Especificar esta opção equivale a definir o parâmetro de configuração max_connections.
As opções no estilo linha de comando especificadas nas opções_extras são passadas para todos os processos servidor iniciados por este processo postgres. Se a cadeia de caracteres da opção contiver espaços, toda a cadeia de caracteres deve vir entre apóstrofos (') ou aspas (").
O uso desta opção está em obsolescência; todas as opções de linha de comando para os processos servidor podem ser especificadas diretamente na linha de comando do postgres.
Especifica a porta TCP/IP, ou a extensão do arquivo de soquete do domínio Unix local, onde o postgres deve ouvir as conexões dos aplicativos cliente. O padrão é o valor da variável de ambiente PGPORT, se esta estiver definida, senão o padrão será o valor estabelecido durante a compilação (normalmente 5432). Se for especificada uma porta diferente da porta padrão, então todos os aplicativos cliente deverão especificar a mesma porta usando a opção de linha de comando ou a variável de ambiente PGPORT.
Mostra informações de tempo e outras estatísticas no final de cada comando. Esta opção é útil para avaliações e para ajustar o número de buffers.
Especifica que o processo postgres deve iniciar no modo silencioso, ou seja, será dissociado do terminal (controlador) 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 de log, o que provavelmente não é o desejado, porque torna muito difícil a solução dos problemas. Veja abaixo uma maneira melhor de iniciar o postgres em segundo plano.
--silent-mode=false produz o efeito oposto desta opção.
Define o parâmetro em tempo de execução designado; uma forma mais curta da opção -c.
Esta opção mostra as variáveis de configuração internas do servidor, descrições e padrões, no formato delimitado por tabulação do COPY. Esta opção foi projetada para ser utilizada principalmente por ferramentas de administração.
Existem várias outras opções que podem ser especificadas, utilizadas principalmente para fins de depuração e, em alguns casos, para ajudar na recuperação de bancos de dados seriamente danificados. There should be no reason to use them in a production database setup. These are listed here only for the use by PostgreSQL system developers. Furthermore, any of these options may disappear or change in a future release without notice.
Proíbe o uso de um determinado método de varredura ou de junção: s e i desativam a varredura seqüencial e de índice, respectivamente, enquanto n, m e h desativam as junções de laço-aninhado, mesclagem e hash, respectivamente.
Nem as varreduras seqüenciais, nem as junções de laço aninhado, podem ser desativadas completamente; as opções -fs e -fn simplesmente desencorajam o uso pelo otimizador de planos destes tipos, se houver alguma outra alternativa.
Esta opção se destina a depuração de problemas que fazem o processo servidor parar de funcionar de forma fora do normal. Nesta situação, a estratégia comum é avisar a todos os outros processos servidor que estes devem terminar e depois reinicializar a memória compartilhada e os semáforos. Isto se deve ao fato de que algum processo servidor mal comportado pode ter danificado algum estado compartilhado antes de terminar. Esta opção especifica que o postgres não reinicializará as estruturas de dado compartilhadas. Um programador de sistemas com conhecimento adequado poderá, então, usar um depurador para examinar o estado da memória compartilhada e dos semáforos.
Permite modificar a estrutura das tabelas do sistema. Usada pelo initdb.
Ignora os índices do sistema ao ler as tabelas do sistema (mas continua atualizando os índices ao modificar as tabelas). É útil ao se fazer a recuperação devido a índices do sistema danificados.
Mostra estatísticas de tempo para cada comando, relacionando com cada um dos principais módulos do sistema. Esta opção não pode ser usada junto com a opção -s.
Esta opção se destina a depuração de problemas que fazem o processo servidor parar de funcionar de forma fora do normal. Nesta situação, a estratégia comum é avisar a todos os outros processos servidor que estes devem terminar e depois reinicializar a memória compartilhada e os semáforos. Isto se deve ao fato de que algum processo servidor mal comportado pode ter danificado algum estado compartilhado antes de terminar. Esta opção especifica que o postgres irá parar todos os outros processos servidor enviando o sinal SIGSTOP, mas não fará com que estes terminem. Isto permite aos programadores de sistema coletarem dumps do núcleo de todos os processos servidor manualmente.
Especifica o número da versão do protocolo cliente/servidor a ser usado por uma determinada sessão. Esta opção é apenas para uso interno.
Ocorre um atraso desta quantidade de segundos quando é iniciado um novo processo servidor, após ser conduzido o procedimento de autenticação. Esta opção tem por finalidade dar oportunidade de anexar um depurador ao processo servidor.
Indica que este é um subprocesso iniciado pelo postgres e especifica o banco de dados a ser utilizado. Esta opção é apenas para uso interno.
As seguintes opções somente se aplicam ao modo monousuário.
Seleciona o modo monousuário. Deve ser o primeiro argumento da linha de comando.
Especifica o nome do banco de dados a ser acessado. Se for omitido o padrão é o nome do usuário.
Mostra todos os comandos.
Desativa a uso do caractere de nova-linha como delimitador do comando.
Envia toda a saída do log para o nome_do_arquivo. No modo normal multiusuário esta opção é ignorada, e a stderr é utilizada por todos os processos.
Codificação dos caracteres padrão utilizada pelos clientes (Os clientes podem mudar individualmente). Este valor também pode ser definido no arquivo de configuração.
Local do diretório de dados padrão.
Valor padrão do parâmetro em tempo de execução DateStyle (A utilização desta variável de ambiente está em obsolescência).
Porta padrão (preferencialmente definida no arquivo de configuração).
Zona horária do servidor.
Uma mensagem de falha mencionando semget ou shmget provavelmente indica a necessidade de configurar o núcleo (kernel), para que este forneça memória compartilhada e semáforos em quantidade adequada. Para obter mais informações deve ser consultada a Seção 16.4. Pode ser possível adiar a reconfiguração do núcleo diminuindo shared_buffers, para reduzir o consumo de memória compartilhada pelo PostgreSQL, e/ou reduzindo max_connections, para reduzir o consumo de semáforos.
Uma mensagem de erro sugerindo que um outro servidor está executando deve ser verificada cuidadosamente utilizando, por exemplo, o comando
$ ps ax | grep postgres
ou
$ ps -ef | grep postgres
dependendo do sistema operacional. Havendo certeza de que não há outro servidor conflitante executando, o arquivo de bloqueio mencionado na mensagem deverá ser removido e a execução tentada novamente.
Uma mensagem de erro indicando não ser possível vincular a porta, pode indicar que a porta está sendo utilizada por um processo não-PostgreSQL. Este erro também pode acontecer se o postgres for terminado e reiniciado imediatamente usando a mesma porta; neste caso, se deve simplesmente aguardar uns poucos segundos para que o sistema operacional feche a porta antes de tentar novamente. Por fim, este erro pode acontecer se for especificado um número de porta que o sistema operacional considere reservado. Por exemplo, muitas versões do Unix consideram os números de porta abaixo de 1024 como "trusted" (confiável), só permitindo o acesso aos superusuários do Unix.
Sempre que for possível não deve ser usado SIGKILL para terminar o postgres. Proceder desta maneira impede que o postgres libere os recursos do sistema utilizados (por exemplo, memória compartilhada e semáforos) antes de terminar, podendo causar problemas ao iniciar uma nova execução do postgres.
Para terminar o servidor postgres normalmente, podem ser usados os sinais SIGTERM, SIGINT e SIGQUIT. O primeiro aguarda todos os clientes terminarem antes de terminar, o segundo força a desconexão de todos os clientes e o terceiro termina imediatamente sem uma parada (shutdown) adequada, provocando a execução da recuperação ao reiniciar. O sinal SIGHUP recarrega os arquivos de configuração do servidor. Também é possível enviar um sinal SIGHUP para um processo servidor individual, mas geralmente não faz sentido.
O utilitário pg_ctl pode ser usado para iniciar e terminar o servidor postgres com segurança e conforto.
Para cancelar um comando em execução, pode ser enviado o sinal SIGINT para o processo que está executando o comando.
O servidor postgres utiliza o sinal SIGTERM para mandar os processos servidor subordinados terminarem normalmente, e o sinal SIGQUIT para terminarem sem uma limpeza normal. Estes sinais não devem ser utilizados pelos usuários. Também não se aconselha a enviar o sinal SIGKILL para o processo servidor — o processo postgres principal irá interpretá-lo como uma queda e irá forçar todos os processos relacionados a terminarem como parte do procedimento padrão de recuperação de queda.
As opções -- não funcionam no FreeBSD nem no OpenBSD. Use a opção -c em seu lugar. Esta é uma falha destes sistemas operacionais; uma versão futura do PostgreSQL disponibilizará um recurso para contornar este problema, caso não seja corrigido.
Para iniciar um servidor no modo monousuário pode ser utilizado um comando como:
postgres --single -D /usr/local/pgsql/data outras_opções meu_banco_de_dados
Deve ser fornecido o caminho correto para o diretório de dados do banco de dados através da chave -D, ou ter certeza que a variável de ambiente PGDATA está definida. Também deve ser especificado o nome do banco de dados com o qual se deseja trabalhar.
Normalmente o servidor no modo monousuário trata o caractere de nova-linha como fim da entrada do comando; não existe inteligência sobre ponto-e-vírgula, como existe no psql. Para continuar o comando por várias linhas, deve ser digitada uma contrabarra (\) logo antes do fim da linha, exceto a última.
Mas se for usada a chave de linha de comando -j, o caractere de nova-linha não termina a entrada do comando. Neste caso, o servidor lê a entrada padrão até a marca de fim-de-arquivo (EOF) e, então, processa a entrada como sendo a cadeia de caracteres de um único comando. Neste caso, a seqüência contrabarra nova-linha não recebe tratamento especial.
Para sair da sessão tecle EOF (geralmente Control+ D). Se for utilizada a chave -j, serão necessários dois EOF consecutivos para sair.
Deve ser observado que o servidor no modo monousuário não oferece funcionalidades sofisticadas para edição de linha (por exemplo, não existe o histórico dos comandos).
Para iniciar o postgres em segundo plano utilizando os valores padrão deve ser digitado:
$ nohup postgres >arquivo_de_log 2>&1 </dev/null &
Para iniciar o postgres em uma determinada porta:
$ postgres -p 1234
Este comando inicia o postgres se comunicando através da porta 1234. Para se conectar a este postgres pelo psql é necessário executar:
$ psql -p 1234
ou definira variável de ambiente PGPORT:
$ export PGPORT=1234 $ psql
Os parâmetros em tempo de execução podem ser definidos por qualquer um destes estilos:
$ postgres -c work_mem=1234 $ postgres --work-mem=1234
Qualquer uma destas formas tem precedência sobre a definição existente para work_mem no arquivo postgresql.conf. Deve ser observado que os sublinhados nos nomes dos parâmetros podem ser escritos tanto com o caractere sublinhado quanto com o caractere hífen na linha de comando. Exceto para experiências de curta duração, provavelmente é uma prática melhor editar a definição no arquivo postgresql.conf do que depender da chave da linha de comando para definir o parâmetro.
[1] |
asserção — do Lat. assertione — proposição que se apresenta como verdadeira. PRIBERAM - Língua Portuguesa On-Line. (N. do T.) |