segunda-feira, 14 de abril de 2014

PostgreSQL: Fatal error: Call to undefined function pg_connect()

Eis um problema que me tirou o sono por vários dias, tentando fazer funcionar Apache + PHP + PostgreSQL instalados de forma independente.

Primeiro deixe eu colocar que não sou a favor de usar WAMP / EasyPHP e outros pacotes similares, porque na hora de configurar um servidor de produção é necessário conhecer cada opção de configuração e nada melhor do que fazer isso instalando os softwares de forma independente.

Voltando ao problema inicial, estava tudo funcionando direito em meu notebook, até que precisei reinstalar os três pacotes (Apache + PHP + PostgreSQL) (não lembro porquê...).

Baixei e instalei as versões mais recentes do Apache, PHP e PostgreSQL.
Configurei corretamente os arquivos httpd.conf e php.ini e em um momento era o PHP que não queria conversar, na outra era o PostgreSQL que não funcionava com o PHP.

"Fatal error: Call to undefined function pg_connect() in ....\conection.php on line 26 "

Pesquisando um monte, a solução dos problemas foi aparecendo aos poucos.

Antes de mais nada, estou rodando no notebook:
- Windows 7 Professional (64 bits)
- Apache 2.2.22 (32 bits)
- PHP 5.3.5 (**VC6**-x86)(32 bits)
- PostgreSQL 9.1 (64 bits)
- PostgreSQL 9.3 (32 bits)

A primeira descoberta que fiz foi saber qual versão do PHP deve ser instalada em função do tipo de servidor web usado (IIS ou Apache). Aqui você já encontra uma dica.
Lendo mais um pouco, descobri que o local em que foi feito o download do Apache também influencia na escolha da versão do PHP que deve ser usada.
Agora você entende porque tem um **VC6** destacado aí em cima...
Com isso, coloquei o PHP e o Apache para rodar..... fim do primeiro round.

Depois de configurar corretamente o php.ini para carregar as extensões do PostgreSQL e reiniciar o Apache, parecia que tudo iria funcionar perfeitamente (pois não apareceu nenhuma mensagem de erro).

Foi quando rodei meu programa para testar a conexão e recebi a mensagem:
"Fatal error: Call to undefined function pg_connect() in ....\conection.php on line 26 "

Passei por vários fóruns tentando descobrir (sem sucesso) uma solução para o problema.
Já estava desanimado quando comecei a ler os comentários em um fórum e, então, vi uma sugestão que não custava tentar: copiar o arquivo libpq.dll (que está na pasta do PHP) para a pasta bin do Apache.

Assim feito, reiniciei o Apache e rodei novamente meu programa PHP para teste de conexão com o banco e.... PRONTO!!!!  Funcionou.

E agora estou aqui postando a solução que funcionou para mim, para que possa ajudar outros com o mesmo problema.

Um comentário:

  1. Simples, não?! Também passei por vários fóruns quando tive esse problema pela primeira vez, a na maioria dos tópicos tem longas discussões falando pra habilitar a extensão pg_sql (que por si só não resolve). E muita gente deixa de usar o Wamp por conta desse problema.

    ResponderExcluir