No puedo encontrar el encabezado 'libpq-fe.h cuando intento instalar pg gem

790

Estoy usando la versión previa Ruby on Rails 3.1. Me gusta usar PostgreSQL, pero el problema es instalar la pggema. Me da el siguiente error:

$ 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

¿Cómo resuelvo este problema?

demonio
fuente
¿puedes probar que tienes pg instalado?
thenengah

Respuestas:

1247

Parece que en Ubuntu ese encabezado es parte del libpq-devpaquete (al menos en las siguientes versiones de Ubuntu: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) y 18.04 (Bionic Beaver)):

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

Intente instalar libpq-devo su equivalente para su sistema operativo:

  • Para sistemas Ubuntu / Debian: sudo apt-get install libpq-dev
  • En los 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 OpenSuse :zypper in postgresql-devel
  • Para ArchLinux :pacman -S postgresql-libs
mu es demasiado corto
fuente
1
no funcionó para mí en 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
Si necesita instalar una biblioteca de JavaScript ... gem install 'execjs' y gem install 'therubyracer'
Nick Woodhams el
@TravisR: Gracias por la actualización, acabo de convertir esto en un wiki de la comunidad para que sea más fácil para todos mantenerlo actualizado.
mu es demasiado corto el
Estoy usando Ubuntu 12.10, no puedo instalar pg gem después de instalar libpq-dev
vedarthk
2
Revise su respuesta para incluirla. apt-get install postgres-server-dev-{pg.version} Su respuesta ya no funciona con postgresql 9.4 en Ubuntu 14.04 Consulte: stackoverflow.com/a/28837453/75194
Ryan Rauh
169

En macOS (anteriormente Mac OS X y OS X ), use Homebrew para instalar los encabezados adecuados:

brew install postgresql

y luego corriendo

gem install pg

Deberia trabajar.

Alternativamente, en lugar de instalar el conjunto postgresql, puede brew install libpqexportar lo correcto PATHy PKG_CONFIG_PATHcomo se explica en la sección 'Advertencias'

Me han robado
fuente
55
¿Esto causa algún problema si también estás usando Postgres.app?
iconoclasta
3
Para mí después de correr, brew install postgressqlcorro ARCHFLAGS="-arch x86_64" gem install pgy funciona bien.
Overallduka
55
Alternativamente, basta con ejecutar brew install libpqxxen Mac OSX
Ricardo Saporta
44
@RicardoSaporta se libpqxxinstala postgresqlcomo dependencia, por lo que es esencialmente lo mismo quebrew install postgresql
Troggy
3
En lugar de instalar el conjunto postgresql, puede brew install libpqexportar lo correcto PATHy PKG_CONFIG_PATHcomo se explica en la sección 'Advertencias'.
goetzc
118

También intenté hacerlo gem install libpq-dev, pero recibí este error:

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

Sin embargo, descubrí que la instalación con sudo apt-get(que trato de evitar usar con Ruby on Rails) funcionó, es decir

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

entonces pude hacer

gem install pg

sin problemas

Michael Durrant
fuente
3
Correcto, la gema pg de Ruby envuelve las bibliotecas habituales de PostgreSQL C que vienen con el libpq-devpaquete Ubuntu / Debian / ...
mu es demasiado corto
46

Podría resolver esto de otra manera. No encontré la biblioteca en mi sistema. Por lo tanto, lo instalé usando una aplicación del sitio web principal de PostgreSQL. En mi caso (OS X) encontré el archivo debajo /Library/PostgreSQL/9.1/include/una vez que finalizó la instalación. También puede tener el archivo en otro lugar dependiendo de su sistema si ya tiene instalado PostgreSQL.

Gracias a este enlace sobre cómo agregar una ruta adicional para la instalación de gemas , podría señalar la gema a la biblioteca con este comando:

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

Después de eso, funciona, porque ahora sabe dónde encontrar la biblioteca que falta. Simplemente reemplace la ruta con la ubicación correcta para su libpq-fe.h

David Peláez
fuente
2
La solución de David funcionó para mí. Rastreé libpq-fe.h hasta '/Applications/Postgres.app/Contents/Versions/9.3/include' y utilicé el comando de exportación con dicha ruta, seguido de 'gem install pg' y la gema se instaló con éxito.
Ryan Spears
Gracias por esto, funcionó para mí, usando:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr
1
El uso de PostgreSQL 9.3 en CentOS 6 He resuelto este enlace simbólico por las pg_*secuencias de comandos en el $ PATH, así: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Instalé postgres 9.3 así: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
1
también puede escribir comogem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445
Mejor aún, use export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". Se pg_configllamará al ejecutable para obtener todas las opciones de compilador y vinculador requeridas; puede ejecutarlo usted mismo para verlas.
skozin
29

No se puede encontrar el encabezado libpq-fe.h

Tuve éxito en CentOS 7.0.1406 ejecutando los siguientes 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

Alternativamente , puede configurar el paquete para que siempre se instale pgcon estas opciones (útil para ejecutar el paquete en entornos de implementación),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
lfender6445
fuente
1
Muy útil, gracias. Solo para agregar una nota sobre la configuración del paquete ... debe ejecutar este comando mientras está conectado como el usuario que ejecutará el comando del paquete posterior. La configuración del paquete se almacena en ~ / .bundle / config, por lo que no se encontrará si ejecuta la configuración del paquete mientras está conectado como root, pero el paquete está siendo ejecutado por (por ejemplo, con capistrano) el usuario 'desplegar'.
Les Nightingill
3
bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config resuelve i por mí en Centos 7
liloargana
2
bundle config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config si está usando postgresql10
Mahesh Neelakanta
25

Para CentOS 6.4,

yum install postgresql-devel
gem install pg

¡funcionado bien!

Arivarasan L
fuente
Usando macports, sudo port install postgresql-devel.
Dawei Yang
17

Para que conste:

Aplicación Ruby on Rails 4 en OS X con PostgresApp (en este caso, se necesita la versión 0.17.1, una especie de proyecto antiguo):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
pablomarti
fuente
1
Funciona muy bien si está utilizando el maravilloso Postgres.app . Para Postgres 10, utilicé el camino/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks
13

En Mac OS X ejecute así:

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

***/path/to/pg_config*** es la ruta a pg_config

Jiemurat
fuente
1
Votado Instalé Postgresql a través del instalador grapihcal de EnterpriseDB . Luego necesito encontrar la ruta pg-config sudo find / -name "pg_config", luego gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configusar la ruta que acabo de descubrir.
Yi Zeng
12

En mi caso fue paquete postgresql-server-dev-8.4(estoy en Ubuntu 11.04 (Natty Narwhal), 64 bits).

Johann
fuente
10

La respuesta correcta para los usuarios de Mac con Postgres.app es construir contra lo libpqproporcionado con ese paquete. Por ejemplo, con la versión 9.4 (actual a partir de este escrito), todo lo que necesita es:

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

Esto mantendrá su pggema sincronizada con exactamente la versión de PostgreSQL que haya instalado. Instalar algo de Homebrew es un desperdicio en este caso.

jelder
fuente
9

Tuve el mismo problema en Amazon Linux. Pude encontrar el encabezado libpq-fe.h, pero de alguna manera no funcionó.

Proviene de las diferentes versiones de los paquetes que se instalaron a través de los diferentes usuarios de la máquina. Se instalaron PostgreSQL 9.2 y PostgreSQL 9.3. Por lo tanto, asegúrese de su versión de PostgreSQL antes de incluir las bibliotecas.

Para mí, la línea de comando mágica fue:

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

Fuente: Una guía casi idiota para instalar PostgreSQL 9.3, PostGIS 2.1 y pgRouting con Yum

Fab V.
fuente
Después de instalar las bibliotecas ... haga una limpieza: "make distclean", "make clean", "./configure" y comience a compilar.
mzalazar
8

Una respuesta más general para cualquier distribución basada en Debian (que incluye Ubuntu) es la siguiente. Primero, instale el apt-filepaquete que se ejecuta como root:

apt-get install apt-file

Esto le permite buscar paquetes que contengan un archivo. Luego, actualice su base de datos usando

apt-file update

(Esto se puede ejecutar como usuario normal). Luego, busque el encabezado que falta usando:

apt-file search libpq-fe.h

En mi máquina, esto da:

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

Ahí tienes!

Vincent Fourmond
fuente
"libpq-dev: /usr/include/postgresql/libpq-fe.h" está presente mientras que "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" es no presente ? Qué me estoy perdiendo ?
furiabhavesh
El contenido del archivo puede haber cambiado. Parece que había una copia privada de libpq-fe.h en el paquete postgres -.... En cualquier caso, el libXXX-dev es el que estás buscando si quieres compilar cosas.
Vincent Fourmond
7

Para MacOS sin instalar el servidor PostgreSQL:

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

En una Mac, lo resolví 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
fuente
4

Estoy ejecutando Postgres.app en una Mac y tuve que

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

primero. Entonces

bundle install

trabajó para mi.

joh-mue
fuente
4

Tuve el mismo problema en Mac OS, pero instalé la gema PostgreSQL fácilmente usando lo siguiente en un terminal:

ARCHFLAGS="-arch x86_64" gem install pg

(Primero instalé PostgreSQL con brew install postgresql).

rassom
fuente
4

Encontré esta respuesta, y fue la única que funcionó para mí (Mac OS), después de investigar durante unos dos días:

$ 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 la pregunta sobre desbordamiento de pila. No se puede encontrar la biblioteca de cliente de PostgreSQL (libpq) .

Cynthia Sanchez
fuente
4

Recientemente actualicé a Mac OS X v10.10 (Yosemite) y estaba teniendo dificultades para construir la pggema.

El error reportado fue el típico:

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

Mi solución fue gem uninstall pgy después bundle update pgde sustituir la gema con la última. Ejecuté brew update; brew upgradedespués de la instalación de Yosemite para obtener las últimas versiones de los paquetes que había instalado anteriormente.

Martin Streicher
fuente
4

En Ubuntu, instale el "libpq-dev" para deshacerse de este problema.

sudo apt-get install libpq-dev
Raju
fuente
Si no es suficiente, agregue sudo apt-get install postgresqlanteslibpq-dev
Alex Poca
3

En CentOS, instalé libpq-dev packageusando el siguiente comando

yum install postgresql-devel

La ejecución gem install pgdevolvió el mismo error que " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config".

Instalar la gema de la siguiente manera resolvió mi problema

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
usuario2086641
fuente
2

En FreeBSD (9.1) el paquete necesario es / usr / ports / database / postgresql-server * que, cuando está instalado, también instalará el archivo de encabezado requerido que hace que la instalación de gemas de "pg" falle. Esta respuesta aquí me ayudó a encontrar la solución, pero la diferencia en los nombres de los paquetes requirió un poco de búsqueda.

¡Esperemos que esto ayude a alguien a evitar rascarse la cabeza al buscar el paquete "-dev" en un sistema FreeBSD!

Claus Due
fuente
2

En Debian 7.0, 64 bits (Wheezy), simplemente ejecute:

sudo apt-get install libpq-dev

Después de instalar con éxito libpq-dev, ejecute:

bundle install
Eric Wu
fuente
2

Bajo CentOS 6.5 (Squeeze) creé un archivo:

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

con contenido:

pathmunge /usr/pgsql-9.3/bin

Tenga en cuenta que aquí debe configurar su ruta PostgreSQL con el archivo pg_config. Puedes encontrar esto con el comando:

$ sudo find / -iname pg_config

Guarda el archivo:

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

e intente ejecutar su comando nuevamente.

Nota: Cada vez que cambie la configuración de Bash , cambiando la configuración de profile.d, debe volver a cargar Bash.

lucianosousa
fuente
¿Cómo instalaste postgres? Yo se enlazan las pg_*secuencias de comandos en la trayectoria de este modo: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Después de eso no necesité ningún script adicional o variables de entorno.
JoePasq
2

La ubicación de libpq-fe.hdepende de dónde esté su instalación de PostgreSQL (que depende de cómo la instaló). Use locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) para encontrar el libpq-fe.harchivo en su máquina. Si existe, estará en el includedirectorio de su instalación de PostgreSQL.

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

El bindirectorio, que contiene pg_config, estará en el mismo directorio que el includedirectorio. Como sugiere el error, use la opción --with-pg-config para instalar la gema:

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

Tenga en cuenta que es posible que deba ejecutarlo updatedbsi nunca lo ha usado locateo si no lo ha actualizado desde que instaló PostgreSQL.

akbrown
fuente
Sin --antes --with-pg-config=..., obtengo un error: ERROR: al ejecutar gem ... (OptionParser :: InvalidOption) opción no válida: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke
2

Finalmente resolví este problema, pero no utilicé los métodos descritos anteriormente.

Utilizando brew install postgresql, descubro que ya estaba instalado, pero no vinculado.

  1. Descubra dónde está instalado PostgreSQL y elimínelo,

  2. Entonces brew install postgresqlotra vez,

  3. brew link postgresql

  4. gem install pg

Chile Yang
fuente
"brew link --force postgresql" funcionó para mí, pero antes de eso tengo que ejecutar 'export PATH = "/ usr/local/opt/[email protected]/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani
2

Tuve este problema con Postgresql 9.6. Pude solucionarlo haciendo:

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

Encontré el mismo error con postgres instalado a través de asdf. Las soluciones pg-config no funcionaron para mí. En su lugar, tuve que localizar la carpeta de inclusión de postgres que contiene el archivo y ejecutar el comando con la --with-pg-includebandera

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

Para AltLinuxel paquete postgresqlx.x-devel(en mi caso postgresql9.5-devel) debe estar instalado:

apt-get install postgresql9.5-devel
Малъ Скрылевъ
fuente
También puede instalar versiones específicas con yum - yum install postgresqlxx-devel, por ejemplo, yum install postgresql94-devel
dworrad
1

Resolví esto instalando el paquete 'postgresql-common'. Este paquete proporciona el pg_configbinario que probablemente es lo que te faltaba.

Fabrizio Regini
fuente