Tidak dapat menemukan tajuk 'libpq-fe.h saat mencoba memasang pg gem


790

Saya menggunakan Ruby on Rails 3.1 versi pre. Saya suka menggunakan PostgreSQL, tetapi masalahnya adalah menginstal pgpermata. Ini memberi saya kesalahan berikut:

$ 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

Bagaimana saya mengatasi masalah ini?


dapatkah Anda membuktikan bahwa Anda telah menginstal pg?
thenengah

Jawaban:


1247

Sepertinya di Ubuntu header itu adalah bagian dari libpq-devpaket (setidaknya dalam versi Ubuntu berikut: 11.04 (Natty Narwhal), 10,04 (Lucid Lynx), 11,10 (Oneiric Ocelot), 12,04 (Precise Pangolin), 14,04 ( Precise Pangolin), 14,04 (Trusty Tahr) dan 18,04 (Bionic Beaver)):

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

Jadi coba instal libpq-devatau yang setara untuk OS Anda:

  • Untuk sistem Ubuntu / Debian: sudo apt-get install libpq-dev
  • Pada sistem Red Hat Linux (RHEL):yum install postgresql-devel
  • Untuk Mac Homebrew :brew install postgresql
  • Untuk Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • Untuk OpenSuse :zypper in postgresql-devel
  • Untuk ArchLinux :pacman -S postgresql-libs

1
tidak bekerja untuk saya di 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
Jika Anda kemudian diminta untuk memiliki perpustakaan javascript diinstal ... permata instal 'execjs' dan permata instal 'therubyracer'
Nick Woodhams

@ TravisR: Terima kasih atas pembaruannya, saya baru saja mengubah ini menjadi wiki komunitas untuk memudahkan semua orang untuk tetap up to date.
mu terlalu pendek

Saya menggunakan Ubuntu 12.10, saya tidak dapat menginstal pg gem setelah menginstal libpq-dev
vedarthk

2
Harap perbaiki jawaban Anda untuk menyertakan apt-get install postgres-server-dev-{pg.version} jawaban Anda tidak lagi berfungsi dengan postgresql 9.4 di Ubuntu 14.04 Lihat: stackoverflow.com/a/28837453/75194
Ryan Rauh

169

Di macOS (sebelumnya Mac OS X dan OS X ), gunakan Homebrew untuk menginstal tajuk yang tepat:

brew install postgresql

dan kemudian berlari

gem install pg

harus bekerja.

Atau, daripada menginstal keseluruhan postgresql, Anda dapat brew install libpqdan mengekspor yang benar PATHdan PKG_CONFIG_PATHseperti yang dijelaskan di bagian 'Peringatan'


5
Apakah ini menyebabkan masalah jika Anda juga menggunakan Postgres.app?
iconoclast

3
Bagi saya setelah menjalankan brew install postgressqlsaya menjalankan ARCHFLAGS="-arch x86_64" gem install pgdan bekerja dengan baik.
overallduka

5
Atau, hanya berjalan brew install libpqxxdi mac OSX sudah cukup
Ricardo Saporta

4
@ RicardoSaporta libpqxxdiinstal postgresqlsebagai dependensi, jadi pada dasarnya sama denganbrew install postgresql
Troggy

3
Alih-alih menginstal keseluruhan postgresql, Anda dapat brew install libpqdan mengekspor yang benar PATHdan PKG_CONFIG_PATHseperti yang dijelaskan di bagian 'Peringatan'.
goetzc

118

Saya juga mencoba melakukan gem install libpq-dev, tetapi saya menerima kesalahan ini:

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

Namun saya menemukan bahwa menginstal dengan sudo apt-get(yang saya coba hindari menggunakan dengan Ruby on Rails) berfungsi, yaitu

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

maka saya bisa melakukannya

gem install pg

tanpa masalah.


3
Benar, Ruby pg permata membungkus biasa PostgreSQL C perpustakaan yang datang dengan Ubuntu / Debian / ... libpq-devpaket.
mu terlalu pendek

46

Saya bisa menyelesaikan ini dengan cara lain. Saya tidak menemukan perpustakaan di sistem saya. Jadi saya menginstalnya menggunakan aplikasi dari situs web utama PostgreSQL. Dalam kasus saya (OS X) saya menemukan file di bawah /Library/PostgreSQL/9.1/include/setelah instalasi selesai. Anda juga dapat memiliki file di tempat lain tergantung pada sistem Anda jika Anda sudah menginstal PostgreSQL.

Berkat tautan ini tentang cara menambahkan jalur tambahan untuk pemasangan gem , saya bisa mengarahkan gem ke lib dengan perintah ini:

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

Setelah itu, berfungsi, karena sekarang tahu di mana menemukan perpustakaan yang hilang. Cukup ganti jalur dengan lokasi yang tepat untuk libpq-fe.h Anda


2
Solusi David berhasil untuk saya. Saya melacak libpq-fe.h ke '/Applications/Postgres.app/Contents/Versions/9.3/include' dan menggunakan perintah ekspor dengan path tersebut, diikuti oleh 'gem install pg' dan gem berhasil diinstal.
Ryan Spears

Terima kasih untuk ini, bekerja untuk saya, menggunakan:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr

1
Menggunakan Postgresql 9.3 pada CentOS 6 Aku memecahkan ini dengan symlinking yang pg_*script ke dalam $ PATH seperti: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Saya memasang postgres 9.3 seperti: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
Anda juga dapat menulis sebagaigem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445

Lebih baik lagi, gunakan export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". Yang pg_configdapat dieksekusi akan dipanggil untuk mendapatkan semua opsi kompilator dan tautan yang diperlukan - Anda dapat menjalankannya sendiri untuk melihatnya.
skozin

29

Tidak dapat menemukan header libpq-fe.h

saya sukses di CentOS 7.0.1406 menjalankan perintah berikut:

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

Atau , Anda dapat mengonfigurasi bundler untuk selalu menginstal pgdengan opsi ini (membantu menjalankan bundler di lingkungan penyebaran),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config

1
sangat membantu, terima kasih. Hanya untuk menambahkan catatan tentang konfigurasi bundle ... Anda harus menjalankan perintah ini saat masuk sebagai pengguna yang akan menjalankan perintah bundel berikutnya. Konfigurasi bundler disimpan dalam ~ / .bundle / config, jadi tidak akan ditemukan jika Anda menjalankan konfigurasi bundel saat login sebagai root, tetapi bundler dijalankan oleh (misalnya dengan capistrano) pengguna 'deploy'.
Les Nightingill

3
bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config selesaikan saya untuk saya di Centos 7
liloargana

2
bundle config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config jika Anda menggunakan postgresql10
Mahesh Neelakanta


17

Sebagai catatan:

Aplikasi Ruby on Rails 4 di OS X dengan PostgresApp (dalam hal ini versi 0.17.1 diperlukan - semacam proyek lama):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config

1
Bekerja dengan baik jika Anda menggunakan Postgres.app yang bagus . Untuk Postgres 10, saya menggunakan jalur/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks

13

Di Mac OS X jalankan seperti ini:

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

***/path/to/pg_config*** adalah path ke pg_config


1
Terpilih. Saya menginstal Postgresql melalui installer grapihcal EnterpriseDB . Maka saya perlu mencari jalan pg-config sudo find / -name "pg_config", kemudian gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configmenggunakan jalur yang baru saja saya temukan.
Yi Zeng


10

Jawaban yang tepat untuk pengguna Mac dengan Postgres.app adalah untuk membangun terhadap yang libpqdisediakan dengan paket itu. Misalnya, dengan rilis 9.4 (saat ini saat penulisan ini), yang Anda butuhkan adalah:

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

Ini akan menjaga pgpermata Anda tetap sinkron dengan versi PostgreSQL yang telah Anda pasang. Menginstal sesuatu dari Homebrew adalah pemborosan dalam kasus ini.


9

Saya memiliki masalah yang sama di Amazon Linux. Saya bisa menemukan tajuknya libpq-fe.h, tetapi entah bagaimana itu tidak berhasil.

Itu berasal dari berbagai versi paket yang diinstal melalui berbagai pengguna pada mesin. PostgreSQL 9.2 dan PostgreSQL 9.3 diinstal. Jadi, pastikan versi PostgreSQL Anda sebelum memasukkan pustaka.

Bagi saya, baris perintah ajaib adalah:

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

Sumber: Panduan hampir idiot untuk menginstal PostgreSQL 9.3, PostGIS 2.1 dan pgRouting dengan Yum


Setelah menginstal pustaka ... lakukan pembersihan: "make distclean", "make clean", "./configure" dan mulai kompilasi!
mzalazar

8

Jawaban yang lebih umum untuk distribusi berbasis Debian (termasuk Ubuntu) adalah sebagai berikut. Pertama, instal apt-filepaket yang berjalan sebagai root:

apt-get install apt-file

Ini memungkinkan Anda untuk mencari paket yang berisi file. Kemudian, perbarui databasenya menggunakan

apt-file update

(ini dapat dijalankan sebagai pengguna biasa). Kemudian, cari tajuk yang hilang menggunakan:

apt-file search libpq-fe.h

Di mesin saya, ini memberi:

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

Ini dia !


"libpq-dev: /usr/include/postgresql/libpq-fe.h" hadir sedangkan "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" adalah tidak hadir ? apa yang saya lewatkan?
furiabhavesh

Konten file mungkin telah berubah. Sepertinya ada salinan pribadi libpq-fe.h di paket postgres -.... Bagaimanapun, libXXX-dev adalah yang Anda cari jika Anda ingin mengkompilasi.
Vincent Fourmond

7

Untuk MacOS tanpa menginstal server PostgreSQL:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"

5

Di Mac, saya menyelesaikannya menggunakan kode ini:

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

4

Saya menjalankan Postgres.app di Mac dan saya harus melakukannya

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

pertama. Kemudian

bundle install

bekerja untukku.


4

Saya memiliki masalah yang sama pada Mac OS, tetapi saya menginstal permata PostgreSQL dengan mudah dengan menggunakan yang berikut di terminal:

ARCHFLAGS="-arch x86_64" gem install pg

(Saya menginstal PostgreSQL pertama kali dengan brew install postgresql.)


4

Saya menemukan jawaban ini, dan itu adalah satu-satunya yang bekerja untuk saya (Mac OS) - setelah meneliti selama sekitar dua hari:

$ 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...

Lihat pertanyaan Stack Overflow Tidak dapat menemukan perpustakaan klien PostgreSQL (libpq) .


4

Saya baru-baru ini ditingkatkan ke Mac OS X v10.10 (Yosemite) dan mengalami kesulitan membangun pgpermata.

Kesalahan yang dilaporkan adalah tipikal:

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

Solusi saya adalah untuk gem uninstall pgdan kemudian bundle update pgmengganti permata dengan yang terbaru. Saya memang menjalankan brew update; brew upgradesetelah Yosemite menginstal untuk mendapatkan versi terbaru dari paket yang saya instal sebelumnya.


4

Di Ubuntu, instal "libpq-dev" untuk menyingkirkan masalah ini.

sudo apt-get install libpq-dev

Jika tidak cukup, tambahkan sudo apt-get install postgresqlsebelumlibpq-dev
Alex Poca

3

Pada CentOS, saya menginstal libpq-dev packagemenggunakan perintah di bawah ini

yum install postgresql-devel

Eksekusi gem install pgmengembalikan kesalahan yang sama dengan " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config".

Menginstal permata seperti di bawah ini memecahkan masalah saya

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

2

Pada FreeBSD (9.1) paket yang diperlukan adalah / usr / ports / database / postgresql-server * yang ketika diinstal juga akan menginstal file header yang diperlukan yang membuat permata menginstal "pg" gagal. Jawaban ini di sini membantu saya menemukan solusinya tetapi perbedaan dalam nama paket membutuhkan sedikit pencarian.

Semoga ini membantu seseorang menghindari sedikit goresan kepala saat mencari paket "-dev" pada sistem FreeBSD!


2

Pada Debian 7.0, 64-bit (Wheezy), jalankan saja:

sudo apt-get install libpq-dev

Setelah Anda berhasil menginstal libpq-dev, jalankan:

bundle install

2

Di bawah CentOS 6.5 (Memeras) saya membuat file:

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

dengan konten:

pathmunge /usr/pgsql-9.3/bin

Catatan di sini, Anda harus mengatur jalur PostgreSQL Anda dengan file pg_config. Anda dapat menemukan ini dengan perintah:

$ sudo find / -iname pg_config

Simpan file:

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

dan coba jalankan perintah Anda lagi.

Catatan: Setiap kali Anda mengubah konfigurasi Bash - mengubah konfigurasi profile.d - Anda harus memuat ulang Bash.


Bagaimana Anda menginstal postgres? Saya symlinked yang pg_*script ke jalan seperti: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Setelah itu saya tidak memerlukan skrip atau variabel lingkungan tambahan.
JoePasq

2

Lokasi libpq-fe.htergantung di mana PostgreSQL Anda instal (yang tergantung pada bagaimana Anda menginstalnya). Gunakan locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) untuk menemukan libpq-fe.hfile di mesin Anda. Jika ada, itu akan berada di includedirektori instalasi PostgreSQL Anda.

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

The bindirektori, yang berisi pg_config, akan berada di direktori yang sama dengan includedirektori. Seperti yang disarankan kesalahan, gunakan opsi --with-pg-config untuk menginstal permata:

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

Perhatikan bahwa Anda mungkin perlu menjalankan updatedbjika Anda belum pernah menggunakan locateatau jika Anda belum memperbarui sejak menginstal PostgreSQL.


Tanpa --sebelumnya --with-pg-config=...saya mendapatkan kesalahan: GALAT: Saat menjalankan permata ... (OptionParser :: InvalidOption) pilihan tidak valid: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke

2

Saya akhirnya memecahkan masalah ini, tetapi tidak menggunakan metode yang dijelaskan sebelumnya.

Menggunakan brew install postgresql, saya mengetahui bahwa itu sudah diinstal, tetapi tidak terhubung.

  1. Cari tahu di mana PostgreSQL diinstal, dan hapus,

  2. Kemudian brew install postgresqllagi,

  3. brew link postgresql

  4. gem install pg


"brew link --force postgresql" bekerja untuk saya tetapi sebelum itu saya harus menjalankan 'export PATH = "/ usr/local/opt/postgresql@9.4/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani

2

Saya baru saja ini pada OSX menjalankan minuman dan postgres@9.4.

Perbaikan saya adalah ini:

CONFIGURE_ARGS="with-pg-include=/usr/local/opt/postgresql@9.4/include/" bundle install

2

Saya mengalami masalah ini dengan Postgresql 9.6. Saya dapat memperbaikinya dengan melakukan:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg

2

Saya mengalami kesalahan yang sama dengan postgres yang diinstal melalui asdf. Solusi pg-config tidak bekerja untuk saya. Sebaliknya saya harus mencari folder postgres include yang berisi file dan menjalankan perintah dengan --with-pg-includeflag

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include

1

Untuk AltLinuxpaket postgresqlx.x-devel(dalam kasus saya postgresql9.5-devel) harus diinstal:

apt-get install postgresql9.5-devel

Anda juga dapat menginstal versi spesifik dengan yum - yum instal postgresqlxx-devel misalnya yum instal postgresql94-devel
dworrad

1

Saya memecahkan ini dengan menginstal paket 'postgresql-common'. Paket ini menyediakan pg_configbiner yang kemungkinan besar adalah apa yang Anda lewatkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.