Última atualização: $Date: 2005/04/06 11:54:46 $
Atual mantenedor: Dave Page (dpage@postgresql.org)
A versão mais recente desse documento pode ser vista em http://pginstaller.projects.postgresql.org/faq/FAQ_windows_br.html.
As FAQ para a compilação nativa do PostgreSQL em Windows estão em http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html.
Essas FAQ tratam apenas da versão nativa do PostgreSQL em Windows. Existe também uma versão utilizando Cygwin, que possui suas próprias FAQ.
O PostgreSQL é suportado em Windows 2000, XP e 2003. Até o presente momento, ele foi testado apenas em sistemas de 32 bits.
Embora não oficialmente suportado, o PostgreSQL irá rodar em Windows NT4 com poucos pequenos ajustes, incluindo:
Cabe ressaltar que muito poucos testes foram feitos com o NT4.
O PostgreSQL requer funcionalidades que não estão disponíveis nessas versões e não vai rodar nelas. Se você precisar executar o PostgreSQL nesse ambiente, pode olhar a versão Cygwin, que possui suporte básico para plataformas 9x.
A maneira mais fácil de instalar o PostgreSQL em Windows é com o instalador disponível no site de FTP do PostgreSQL e seus espelhos. Ele vai instalar uma versão pré-compilada do programa, além do pgAdmin (uma ferramenta gráfica de administração e gerenciamento), uma seleção de módulos 'contrib' para proporcionar funcionalidades especializadas adicionais, e opções de linguagens procedurais.
Para usar o instalador, você precisa de um computador rodando Windows 2000, 2003 ou XP com o Windows Installer Service instalado. O instalador irá criar a conta de serviços, se requerido, e inicializar o agrupamento de bancos de dados.
O download do instalador pode ser feito aqui, e as correções posteriores podem ser baixadas daqui.
As FAQ para compilação em Windows em http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html contém detalhes completos para a compilação do código-fonte do PostgreSQL nesses sistemas.
Quando um hacker consegue entrar em um computador utilizando uma vulnerabilidade de um programa, ele obtém as permissões da conta da usuário sob a qual o serviço é executado. Apesar de não sabermos de tais vulnerabilidades no PostgreSQL, nós forçamos o uso de uma conta de usuário limitado para minimizar o possível dano que um hacker possa provocar no caso dele encontrar e utilizar uma falha do PostgreSQL para invadir o sistema.
Essa tem sido uma prática comum há muito tempo no mundo Unix, e está começando a se tornar procedimento padrão no mundo Windows, à medida que a Microsoft e outros fabricantes trabalham para melhorar a segurança de seus sistemas.
A prioridade número um do PostgreSQL é a integridade de seus dados. Os sistemas de arquivos FAT e FAT32 simplesmente não oferecem a confiabilidade necessária para tanto. Além disso, a falta de recursos de segurança oferecidos pela FAT tornam impossível prevenir a modificação não autorizada dos arquivos de dados. Finalmente, o PostgreSQL utiliza um recurso chamado 'reparse points' para implementar tablespaces. Esse recurso não está disponível em partições FAT.
O sistema de arquivos NTFS é jornalizado, oferecendo muito melhor confiabilidade e recuperação de desastres. Além disso, possui um sistema de controle de acesso compreensível e oferece a funcionalidade 'reparse points' utilizada pelo PostgreSQL.
Por essa razão, o instalador do PostgreSQL somente inicializará o agrupamento de bancos de dados em uma partição NTFS. O servidor e utilitários podem ser instalados em qualquer tipo de partição.
Reconhece-se, porém, que em alguns sistemas, tais como estações de desenvolvimento, partições FAT podem ser a única opção. Nesses casos, você pode simplesmente instalar o PostgreSQL normalmente, mas sem inicializar o agrupamento de bancos de dados. Quando a instalação terminar, execute manualmente o programa 'initdb.exe' na partição FAT. Segurança e confiabilidade serão comprometidas, no entanto, e qualquer tentativa de criar tablespaces irá falhar.
A conta do serviço do PostgreSQL precisa de permissão de leitura em todos os diretórios que apontam para o diretório do serviço. Necessita de permissão de escrita apenas no diretório de dados. Especificamente, não deve ser concedido nada que não permissão de leitura nos diretórios contendo arquivos binários.(Todos os diretórios abaixo do escolhido para a instalação são definidos pelo instalador e, a não ser que você mude alguma coisa, não deve haver problemas com isso).
O PostgreSQL também precisa de permissão de leitura nos arquivos de DLL do sistema, tais como kernel32.dll e user32.dll (dentre outros), que é normalmente concedida por padrão, e no binário CMD.EXE, que pode ser bloqueado em algumas situações e necessitar ser aberto.
Se você está executando o PostgreSQL em um sistema multi-usuário, deve remover as permissões dos diretórios do PostgreSQL para todos os usuários não-administradores. Nenhum usuário nunca irá precisar de permissão nos arquivos do PostgreSQL - toda comunicação é feita através da conexão proporcionada pela libpq. Acesso direto a arquivos de dados pode levar a exposição da informação ou instabilidade do sistema!
A codificação Unicode não é suportada corretamente em Windows, e não pode ser utilizada. O instalador irá permitir que você selecione qualquer codificação que seja suportada pelo PostgreSQL e por sua versão do Windows.
O problema com o Unicode foi explicado por Aleksander Kmetec em uma mensagem para a lista pgsql-hackers:
Por que o Postgres confia no sistema operacional para algumas funções relacionadas com strings, o SO precisa suportar a mesma codificação que é utilizada como a codificação do banco de dados. Infelizmente, o Windows não suporta algumas codificações que estão disponíveis do lado do servidor para o PG.
Aqui está um pequeno exemplo caso o parágrafo anterior não faça muito sentido: com um banco de dados UNICODE (na verdade, UTF8) você precisa utilizar uma locale compatível quando executando o initdb; no meu caso isso quer dizer "sl_SI.utf8" (em Linux) ou "Slovenian_Slovenia.65001" (em Windows).
65001 é o número de código de página para utf8; porém esse não é realmente um código de página válido. O documento originalmente em http://www.sharmahd.com/tm/codepages.html, mas infelizmente removido, dizia que:
"65000 (UTF-7) e 65001 (UTF-8) são pseudo códigos de páginas. Não há arquivos NLS correspondentes. Os ID de código de página podem ser utilizados apenas como chamadas WideCharToMultiByte( ) e MultiByteToWideChar( ) da API."
Isso significa que UPPER(), LOWER() e ORDER BY não funcionam corretamente para bancos de dados UNICODE. Atualmente, não é nem possível executar o initdb com uma locale que utilize codificação 65001. Uma pequena modificação no initdb me permitiu definir LC_COLLATE para Slovenian_Slovenia.65001, mas as ordenações estavam ainda muito alteradas, o que faz sentido considerando aquilo que foi explicado.
Depois de alguma checagem, cheguei a essa lista de codificações que são suportadas pelo PG, mas não são mencionadas em nenhum lugar como sendo suportadas pelo Windows:
A opção de linguagem feita durante a instalação é válida apenas para o instalador. Para modificar o idioma das mensagens do produto instalado, certifique-se que você instalou o recurso Suporte para idioma nacional. Então edite seu arquivo postgresql.conf e modifique o valor do parâmetro lc_messages para o idioma que você deseja.
As razões mais comuns para isso são anti-vírus e firewalls. Se você tem algum programa de firewall instalado em sua máquina, tente desabilitá-lo ou desinstalá-lo. Se você possui anti-vírus instalado, deve desabilitá-lo para os diretórios que serão utilizados pelo PostgreSQL. Se isso ainda não resolve o problema, deve ser necessário desinstalar completamente o anti-vírus/firewall de sua máquina.
Questões específicas foram relatadas com o anti-vírus nod32. Se você o utiliza, adicione "postmaster.exe" à lista de processos excluídos (disponível nas opções avançadas). Isso foi reportado como sendo a solução para o problema.
Problemas específicos também foram relatados com os anti-vírus McAfee e Panda, além do monitorador de rede NetLimiter. Uma vez que existem pessoas que têm o PostgreSQL trabalhando juntamente com esses programas, não há soluções específicas ou mesmo recomendadas para esses casos. Os problemas parecem ser específicos da máquina onde o programa está instalado, podendo até mesmo exigir sua remoção.
Também há um problema se você tem o cygwin instalado, e o diretório cygwin\bin está presente na variável de ambiente PATH. Existem DLLs no diretório cygwin que são relacionadas com linguagens interpretadas (TCL, perl, python) e contém erros que podem fazer com que o instalador, ou mesmo a versão instalada do PostgreSQL, travem ou congelem. Remova o diretório cygwin\bin directory de seu PATH antes de rodar o instalador!
Provavelmente a conta especificada é um administrador ou usuário avançado, mesmo que você não saiba disso. A verificação feita pelo instalador checa especificamente os membros dos grupos de Administradores e Usuários Avançados. Verifique em Usuários e Grupos Locais e veja quem é membro do grupo de Administradores. Se houver grupos que sejam membros de Administradores, cheque também seus membros. O PostgreSQL verifica todos os níveis de grupos aninhados.
Assegure-se que a conta do PostgreSQL possui os direitos de "Fazer logon como um serviço" e "Fazer logon local". O último é necessário apenas durante a instalação, e pode ser removido após seu término se a política de segurança assim o requer. (Direitos são concedidos e retirados utilizando as "Configurações Locais de Segurança"."Fazer logon local" é o padrão, e "Fazer logon como um serviço" será normalmente concedido pelo instalador).
Se você ainda tem esse problema, habilite a auditoria (ainda utilizando as "Configurações Locais de Segurança") e diga-nos quais outros direitos são necessários em sua configuração.
Observe que se seu computador é membro de um domínio, as definições das políticas de segurança podem ser controladas no nível do domínio utilizando Políticas de Grupo.
Assegure-se que a conta do serviço PostgreSQL possui permissões nos diretórios que apontam para onde você instalou o programa. O instalador irá definir as permissões no diretório de instalação, mas não nos diretórios acima. Veja a pergunta 2.5 para saber as permissões necessárias.
Infelizmente, é isso mesmo. O backend do PostgreSQL não irá rodar a partir de uma sessão serviços de terminal, e para executar o initdb o instalador tem que iniciar o backend isoladamente.Logo, a instalação tem que ser feita a partir do console. Observe que, se você está utilizando Windows Server 2003, você pode obter acesso remoto ao console propriamente dito, e não apenas uma sessão administrativa. Para fazer isso, inicie uma "Remote Desktop Connection" executando mstsc /console, e então connects-se normalmente. Isso irá bloquear o console local do servidor e dá-lo controle sobre aquela sessão. Nesse cenário, o PostgreSQL deve instalar normalmente.
Assegure-se que você mudou o diretório do recurso raiz. O instalador permite que a mudança do diretório de cada recurso individual. Se você mudar o recurso raiz ("PostgreSQL"), todos os sub-recursos (tais como "Servidor de Banco de Dados") irão automaticamente herdar esse valor, mas se você modifica apenas um sub-recurso o restante da instalação permanece no local padrão.