Não é possível encontrar o cabeçalho 'libpq-fe.h ao tentar instalar o pg gem

790

Estou usando a versão pré do Ruby on Rails 3.1. Eu gosto de usar o PostgreSQL, mas o problema está na instalação da pggema. Dá-me o seguinte erro:

$ gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
    --with-pg
    --without-pg
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config


Gem files will remain installed in /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0 for inspection.
Results logged to /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0/ext/gem_make.out

Como eu resolvo este problema?

demonchand
fonte
você pode provar que possui o pg instalado?
thenengah 18/05

Respostas:

1247

Parece que no Ubuntu esse cabeçalho faz parte do libpq-devpacote (pelo menos nas seguintes versões do Ubuntu: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) e 18.04 (Bionic Beaver)):

...
/usr/include/postgresql/libpq-fe.h
...

Portanto, tente instalar libpq-devou equivalente para o seu sistema operacional:

  • Para sistemas Ubuntu / Debian: sudo apt-get install libpq-dev
  • Nos sistemas Red Hat Linux (RHEL):yum install postgresql-devel
  • Para Mac Homebrew :brew install postgresql
  • Para Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • Para o OpenSuse :zypper in postgresql-devel
  • Para o ArchLinux :pacman -S postgresql-libs
mu é muito curto
fonte
1
não funcionou para mim no ubuntu 11.04durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ gem install libpq-dev ERROR: Could not find a valid gem 'libpq-dev' (>= 0) in any repository durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$
Michael Durrant
1
Se você, em seguida, são obrigados a ter uma biblioteca javascript instalado ... gem install 'execjs' e instalar gem 'therubyracer'
Nick Woodhams
@ TravisR: Obrigado pela atualização, acabei de transformá-la em um wiki da comunidade para tornar mais fácil para todos mantê-lo atualizado.
mu é muito curto
Eu estou usando o Ubuntu 12.10, eu não sou capaz de instalar pg gem após a instalação libpq-dev
vedarthk
2
Por favor, rever a sua resposta para incluir apt-get install postgres-server-dev-{pg.version} sua resposta não funciona mais com o PostgreSQL 9.4 no Ubuntu 14.04 See: stackoverflow.com/a/28837453/75194
Ryan Rauh
169

No macOS (anteriormente Mac OS X e OS X ), use o Homebrew para instalar os cabeçalhos adequados:

brew install postgresql

e depois correndo

gem install pg

Deveria trabalhar.

Como alternativa, em vez de instalar o todo postgresql, você pode brew install libpqexportar o correto PATHe PKG_CONFIG_PATHconforme explicado na seção 'Advertências'

Fui roubado
fonte
5
Isso causa problemas se você também estiver usando o Postgres.app?
Iconoclast
3
Para mim, depois de correr, brew install postgressqlcorro ARCHFLAGS="-arch x86_64" gem install pge funciona bem.
overallduka
5
Como alternativa, basta rodar brew install libpqxxno Mac OSX
Ricardo Saporta
4
@RicardoSaporta libpqxxinstala postgresqlcomo dependência, por isso é essencialmente o mesmobrew install postgresql
Troggy
3
Em vez de instalar o todo postgresql, você pode brew install libpqexportar o correto PATHe PKG_CONFIG_PATHconforme explicado na seção 'Advertências'.
goetzc 14/01/19
118

Eu também tentei fazer gem install libpq-dev, mas recebi este erro:

Can't find the 'libpq-fe.h header
*** extconf.rb failed ***

No entanto, descobri que a instalação com sudo apt-get(que tento evitar usar com Ruby on Rails) funcionou, ou seja,

sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04

então eu pude fazer

gem install pg

sem problemas.

Michael Durrant
fonte
3
Certo, o Ruby pg gem agrupa as bibliotecas PostgreSQL C usuais que acompanham o libpq-devpacote Ubuntu / Debian / ....
mu é muito curto
46

Eu poderia resolver isso de outra maneira. Não encontrei a biblioteca no meu sistema. Assim, instalei-o usando um aplicativo do site principal do PostgreSQL. No meu caso (OS X), encontrei o arquivo abaixo /Library/PostgreSQL/9.1/include/quando a instalação terminou. Você também pode ter o arquivo em outro lugar, dependendo do seu sistema, se você já possui o PostgreSQL instalado.

Graças a este link sobre como adicionar um caminho adicional para a instalação do gem , eu poderia apontar o gem para a lib com este comando:

export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg

Depois disso, ele funciona, porque agora sabe onde encontrar a biblioteca ausente. Apenas substitua o caminho pelo local certo para o seu libpq-fe.h

David Pelaez
fonte
2
A solução de David funcionou para mim. Rastreei libpq-fe.h para '/Applications/Postgres.app/Contents/Versions/9.3/include' e usei o comando export com esse caminho, seguido pelo 'gem install pg' e o gem instalado com sucesso.
Ryan Spears
Obrigado por isso, trabalhou para mim, usando:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr
1
Utilizar o PostgreSQL 9.3 no CentOS 6 Eu resolvi isso link simbólico os pg_*roteiros para o $ PATH assim: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Eu instalei o postgres 9.3 da seguinte forma:yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm && yum install postgresql93 postgresql93-contrib postgresql93-server postgresql93-devel
JoePasq 16/01
1
você também pode escrever comogem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445
Melhor ainda, use export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". O pg_configexecutável será chamado para obter todas as opções necessárias do compilador e vinculador - você pode executá-lo para vê-las.
precisa saber é
29

Não foi possível encontrar o cabeçalho libpq-fe.h

tive sucesso no CentOS 7.0.1406 executando os seguintes comandos:

~ % psql --version # => psql (PostgreSQL) 9.4.1
yum install libpqxx-devel
gem install pg -- --with-pg-config=/usr/pgsql-9.4/bin/pg_config

Como alternativa , você pode configurar o bundler para instalar sempre pgcom essas opções (útil para executar o bundler em ambientes de implementação),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
lfender6445
fonte
1
muito útil, obrigado. Apenas para adicionar uma observação sobre a configuração do pacote configurável ... você deve executar este comando enquanto estiver conectado como o usuário que executará o comando do pacote configurável subsequente. A configuração do bundler é armazenada em ~ / .bundle / config, portanto, não será encontrada se você executar a configuração do bundle enquanto estiver logado como root, mas o bundler estiver sendo executado pelo usuário 'deploy' (por exemplo, com capistrano).
Les Nightingill
3
configuração do pacote build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config resolve-me no Centos 7
liloargana
2
pacote de configuração build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config se você estiver usando postgresql10
Mahesh Neelakanta
25

Para o CentOS 6.4,

yum install postgresql-devel
gem install pg

funcionou bem!

Arivarasan L
fonte
Usando macports sudo port install postgresql-devel,.
Dawei Yang 29/04
17

Apenas para o registro:

Aplicativo Ruby on Rails 4 no OS X com PostgresApp (neste caso, versão 0.17.1 necessária - tipo de projeto antigo):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
pablomarti
fonte
1
Funciona muito bem se você estiver usando o maravilhoso Postgres.app . Para o Postgres 10, usei o caminho/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks
13

No Mac OS X, execute assim:

gem install pg -- --with-pg-config=***/path/to/pg_config***

***/path/to/pg_config*** é o caminho para pg_config

Jiemurat
fonte
1
Votado. Instalei o Postgresql através do instalador grapihcal do EnterpriseDB . Então eu preciso descobrir o caminho da pg-config sudo find / -name "pg_config", gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configusando o caminho que eu acabei de descobrir.
Yi Zeng
12

No meu caso, era pacote postgresql-server-dev-8.4(estou no Ubuntu 11.04 (Natty Narwhal), 64 bits).

Johann
fonte
10

A resposta certa para usuários de Mac com Postgres.app é compilar com o libpqfornecido com esse pacote. Por exemplo, com a versão 9.4 (atual até o momento em que este artigo foi escrito), tudo que você precisa é:

export CONFIGURE_ARGS="with-pg-include=/Applications/Postgres.app/Contents/Versions/9.4/include"
gem install pg

Isso manterá sua pgjóia sincronizada exatamente com a versão do PostgreSQL que você instalou. Instalar algo do Homebrew é um desperdício neste caso.

jelder
fonte
9

Eu tive o mesmo problema no Amazon Linux. Eu consegui encontrar o cabeçalho libpq-fe.h, mas de alguma forma não funcionou.

Ele veio das diferentes versões dos pacotes que foram instalados pelos diferentes usuários na máquina. PostgreSQL 9.2 e PostgreSQL 9.3 foram instalados. Portanto, verifique sua versão do PostgreSQL antes de incluir as bibliotecas.

Para mim, a linha de comando mágica era:

sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel

Fonte: Guia quase idiota para instalar o PostgreSQL 9.3, PostGIS 2.1 e pgRouting with Yum

Fab V.
fonte
Após instalar as bibliotecas ... faça uma limpeza: "make distclean", "make clean", "./configure" e comece a compilar!
Mzalazar #
8

Uma resposta mais geral para qualquer distribuição baseada no Debian (que inclui o Ubuntu) é a seguinte. Primeiro, instale o apt-filepacote executando como root:

apt-get install apt-file

Isso permite procurar pacotes contendo um arquivo. Em seguida, atualize seu banco de dados usando

apt-file update

(isso pode ser executado como usuário normal). Em seguida, procure o cabeçalho ausente usando:

apt-file search libpq-fe.h

Na minha máquina, isso fornece:

libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h

Ai está !

Vincent Fourmond
fonte
"libpq-dev: /usr/include/postgresql/libpq-fe.h" está presente enquanto "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" está presente não presente ? o que estou perdendo ?
furiabhavesh
O conteúdo do arquivo pode ter sido alterado. Parece que havia uma cópia privada do libpq-fe.h no pacote postgres -.... De qualquer forma, o libXXX-dev é o que você está procurando se quiser compilar coisas.
Vincent Fourmond
7

Para MacOS sem instalar o servidor PostgreSQL:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"
Michael A.
fonte
5

Em um Mac, resolvi usando este código:

gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
Mario
fonte
4

Estou executando o Postgres.app em um Mac e tive que

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin

primeiro. Então

bundle install

trabalhou para mim.

joh-mue
fonte
4

Eu tive o mesmo problema no Mac OS, mas instalei a gem PostgreSQL facilmente usando o seguinte em um terminal:

ARCHFLAGS="-arch x86_64" gem install pg

(Instalei o PostgreSQL primeiro com brew install postgresql.)

rassom
fonte
4

Encontrei esta resposta e foi a única que funcionou para mim (Mac OS) - depois de pesquisar por cerca de dois dias:

$ sudo su

$ env ARCHFLAGS="-arch x86_64" gem install pg

Building native extensions.  This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...

Consulte Pergunta de estouro de pilha Não foi possível encontrar a biblioteca do cliente PostgreSQL (libpq) .

Cynthia Sanchez
fonte
4

Recentemente, atualizei para o Mac OS X v10.10 (Yosemite) e estava com dificuldades para criar a pggema.

O erro relatado foi o típico:

Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***

Minha solução foi gem uninstall pgem seguida bundle update pgpara substituir a gema com a mais recente. Eu executei brew update; brew upgradeapós a instalação do Yosemite para obter as versões mais recentes dos pacotes que eu tinha instalado anteriormente.

Martin Streicher
fonte
4

No Ubuntu, instale o "libpq-dev" para se livrar desse problema.

sudo apt-get install libpq-dev
Raju
fonte
Se não for suficiente, adicione sudo apt-get install postgresqlantes #libpq-dev
Alex Poca
3

No CentOS, eu instalei libpq-dev packageusando o comando abaixo

yum install postgresql-devel

A execução gem install pgretornou o mesmo erro que " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config".

Instalar a gema conforme abaixo resolveu meu problema

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
user2086641
fonte
2

No FreeBSD (9.1), o pacote necessário é / usr / ports / database / postgresql-server * que, quando instalado, também instala o arquivo de cabeçalho necessário que faz com que a instalação gem de "pg" falhe. Esta resposta aqui me ajudou a encontrar a solução, mas a diferença nos nomes dos pacotes exigiu um pouco de pesquisa.

Espero que isso ajude alguém a evitar um pouco de coçar a cabeça ao procurar pelo pacote "-dev" em um sistema FreeBSD!

Claus Due
fonte
2

No Debian 7.0, 64 bits (Wheezy), basta executar:

sudo apt-get install libpq-dev

Após a instalação bem-sucedida do libpq-dev, execute:

bundle install
Eric Wu
fonte
2

No CentOS 6.5 (Squeeze), criei um arquivo:

$ sudo touch /etc/profile.d/psql.sh

com conteúdo:

pathmunge /usr/pgsql-9.3/bin

Observe aqui, você deve definir seu caminho no PostgreSQL com o arquivo pg_config. Você pode encontrar isso com o comando:

$ sudo find / -iname pg_config

Salve o arquivo:

$ sudo chmod +x /etc/profile.d/ruby.sh

e tente executar seu comando novamente.

Nota: Sempre que você alterar a configuração do Bash - alterando a configuração do perfil.d -, recarregue o Bash.

lucianosousa
fonte
Como você instalou o postgres? I simbolicamente os pg_*roteiros para o caminho da seguinte forma: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Depois disso, não precisei de scripts ou variáveis ​​de ambiente adicionais.
JoePasq
2

A localização de libpq-fe.hdepende de onde está sua instalação do PostgreSQL (que depende de como você a instalou). Use locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) para encontrar o libpq-fe.harquivo em sua máquina. Se existir, estará no includediretório de instalação do PostgreSQL.

$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h

O bindiretório, que contém pg_config, estará no mesmo diretório que o includediretório. Como o erro sugere, use a opção --with-pg-config para instalar a gem:

$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"

Observe que você pode precisar executar updatedbse nunca usou locateou se não atualizou desde a instalação do PostgreSQL.

akbrown
fonte
Sem --antes do --with-pg-config=...eu recebo um erro: ERROR: Durante a execução de gem ... (OptionParser :: InvalidOption) opção inválida: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke
2

Finalmente resolvi esse problema, mas não usando os métodos descritos anteriormente.

Usando brew install postgresql, descobri que ele já estava instalado, mas não vinculado.

  1. Descubra onde o PostgreSQL está instalado e exclua-o,

  2. Então brew install postgresql, novamente,

  3. brew link postgresql

  4. gem install pg

Chile Yang
fonte
"link de preparação - force postgresql" funcionou para mim, mas antes eu tenho que executar 'export PATH = "/ usr/local/opt/[email protected]/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani
2

Eu tive esse problema com o Postgresql 9.6. Consegui corrigi-lo fazendo:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg
mwalsher
fonte
2

Encontrei o mesmo erro com o postgres instalado através do asdf. As soluções pg-config não funcionaram para mim. Em vez disso, tive que localizar a pasta include do postgres que contém o arquivo e executar o comando com a --with-pg-includebandeira

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include
Matthias Michael Engh
fonte
1

Para AltLinuxo pacote postgresqlx.x-devel(no meu caso postgresql9.5-devel) deve ser instalado:

apt-get install postgresql9.5-devel
Малъ Скрылевъ
fonte
Você também pode instalar versões específicas com yum - yum install postgresqlxx-devel por exemplo yum install postgresql94-devel
dworrad
1

Eu resolvi isso instalando o pacote 'postgresql-common'. Este pacote fornece o pg_configbinário que provavelmente é o que estava faltando.

Fabrizio Regini
fonte