Tidak dapat menemukan perpustakaan klien PostgreSQL (libpq)

146

Saya mencoba menginstal PostgreSQL untuk Rails di Mac OS X 10.6. Pertama saya mencoba menginstal MacPorts tetapi itu tidak berjalan dengan baik jadi saya melakukan instalasi DMG satu-klik. Itu sepertinya berhasil.

Saya kira saya perlu menginstal paket pengembangan PostgreSQL tapi saya tidak tahu bagaimana melakukannya di OS X.

Inilah yang saya dapatkan ketika saya coba lakukan sudo gem install pg:

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

        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /Library/PostgreSQL/8.3/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** 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=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/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
    --with-pqlib
    --without-pqlib
    --with-libpqlib
    --without-libpqlib
    --with-ms/libpqlib
    --without-ms/libpqlib


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.11.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.11.0/ext/gem_make.out
Jason Swett
sumber
Apakah Anda menginstal postgresql versi 8.3 atau mengambil beberapa instalasi lama? Jika 8,3 perpustakaan harus di /Library/PostgreSQL/8.3/lib silakan periksa jika ada.
Eelke
Saya melakukan versi 8.3 dan, ya, sepertinya semuanya ada di sana.
Jason Swett
Bisakah Anda memposting output dari pg_config? Itu seharusnya memudahkan kita untuk membantu.
justis
Saya harus menambahkan versi -v '0.14.0' sehingga bekerja dengan proyek mu
Matthieu Rouif

Jawaban:

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

BEKERJA!

Siddhartha Mukherjee
sumber
2
Saya harus menambahkan versi "env ARCHFLAGS =" - arch x86_64 "permata install -v '0.14.0'" sehingga bekerja dengan proyek saya
Matthieu Rouif
6
Bekerja untuk OS X Mavericks. Bagi saya, inienv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang
17
Dan jika Anda menggunakan "Postgres.app", di bawah maverick, Anda harus melakukan: env ARCHFLAGS = "- lengkung x86_64 gem install pg - --with-pg-config = / Aplikasi / Postgres.app / Isi / Versi / 9.3 / bin / pg_config (Asumsikan Anda menggunakan Postgres.app versi 9.3, karena lokasi pg_config mungkin berubah jika Anda menggunakan versi yang berbeda, tetapi bagaimanapun Anda dapat menemukannya)
Zhaonan
2
Ini bekerja untuk saya dan menghentikan penghentian 2 jam. Saya baru mengenal kereta api dan ini membuat frustrasi. Seperti komentator sebelumnya, saya menggunakan installer Postgres.app di Mavericks. Tidak menyadari variabel env ARCHFLGS begitu penting. Penjelasan di sini.
GNat
3
Pertanyaannya adalah, mengapa ini bekerja? Apa yang dilakukan "ARCHFLAGS =" - arch x86_64 ", dan mengapa permata vanilla tidak berfungsi? Seharusnya tidak sesulit ini untuk memasang permata.
Jared Menard
78

Saya mencoba jawaban teratas di sini:

env ARCHFLAGS="-arch x86_64" gem install pg

Tetapi ketika saya mencoba menjalankan bundel menginstal lagi, ia memiliki kesalahan yang sama. Lalu saya mencoba seluruh paket bundel dengan ARCHFLAGS seperti:

ARCHFLAGS="-arch x86_64" bundle install

Bekerja untukku! Pastikan untuk mengganti x86_64 dengan i386 tergantung pada arsitektur apa yang Anda miliki.

Christine Loh
sumber
2
Terima kasih banyak. Inilah yang bekerja untuk saya. Saya telah mencoba untuk menyelesaikan masalah ini selama satu jam plus sekarang, dan kode ini adalah apa yang melakukannya - ARCHFLAGS = "- arch x86_64" bundle install
piratetone
Tambahan @piratetone di sini bekerja untuk saya di High Sierra
tnaught
Dihormati karena @Christine, ini bekerja untuk saya di High Sierra
Ymow Wu
31

Saya baru saja mengalami masalah ini ketika menggunakan EnterpiseDB .dmg. Jika itu pemikiran yang sama yang Anda gunakan, saya membuatnya bekerja dengan menentukan arsitektur yang tepat:

sudo env ARCHFLAGS="-arch i386" gem install pg

Ada beberapa tutorial di web yang mengatakan untuk menentukan arsitektur yang berbeda (seperti "-arch x86_64" untuk orang-orang yang menggunakan MacPorts) tetapi itu tidak berfungsi untuk saya karena saya menggunakan instalasi file tunggal.

bobfet1
sumber
6
x86_64 bekerja untuk saya (Mac OS 10.6.8, PostgreSQL diinstal melalui homebrew: mxcl.github.com/homebrew )
chesterbr
2
Telah menggunakan waktu berjam-jam untuk menemukan solusi dan solusi Anda berhasil, bobfet1 & @chester. Terima kasih! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" permata instal pg **
rassom
24

Jika menggunakan Yosemite:

brew install postgres

Kemudian:

ARCHFLAGS="-arch x86_64" gem install pg

Dan (opsional) akhirnya, jika Anda ingin meluncurkan autovacuum ...

postgres -D /usr/local/var/postgres
etusm
sumber
21

Mungkin Anda bisa mencoba yang ini:

ARCHFLAGS="-arch i386 -arch x86_64" gem install pg

Untuk mengetahui arsitektur perpustakaan Anda, Anda dapat menggunakan

file /usr/local/lib/libpq.dylib 

yang memberikan hanya 1 arsitektur dalam kasus saya (diinstal melalui homebrew):

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
ybart
sumber
+1 Terima kasih atas petunjuk tentang mengetahui arsitektur perpustakaan saya!
Spike
Periksa juga arsitektur biner ruby ​​Anda.
Leopd
18

Solusi: instal ulang PostgreSQL dengan Homebrew.

Jason Swett
sumber
1
Selamat! Ingatlah untuk memberikan hadiah kepada seseorang. Beberapa orang berusaha keras untuk membantu, bahkan jika itu bukan solusi terakhir, dan poin reputasi sudah dihabiskan ketika Anda menawarkan hadiah.
justis
2
Tidak yakin mengapa ini mendapat -1, bekerja untuk saya ketika tidak ada metode lain yang melakukannya
Abe Petrillo
Saya juga akhirnya harus menggunakan metode ARCHFLAGS, tetapi tidak berhasil sampai setelah menginstal ulang postresql dengan homebrew.
Dave Cowart
Bekerja untuk Yosemite (10.10.3). buat instalasi PostgreSQL
roosevelt
Ini tidak berhasil untuk saya. Bertanya-tanya apakah itu ada hubungannya dengan fakta bahwa saya menggunakan Ruby "bawaan" (saya pikir) alih-alih yang lain: |
rogerdpack
6

Palsu gemdengan mengawali variabel lingkungan yang sesuai. Jika Anda menginstal dari MacPorts, Anda harus dapat menjalankan prosedur berikut:

% /opt/local/lib/postgresql91/bin/pg_config
BINDIR = /opt/local/lib/postgresql91/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql91
PKGINCLUDEDIR = /opt/local/include/postgresql91
INCLUDEDIR-SERVER = /opt/local/include/postgresql91/server
LIBDIR = /opt/local/lib/postgresql91
PKGLIBDIR = /opt/local/lib/postgresql91
LOCALEDIR = /opt/local/share/locale
MANDIR = /opt/local/share/man
SHAREDIR = /opt/local/share/postgresql91
SYSCONFDIR = /opt/local/etc/postgresql91
PGXS = /opt/local/lib/postgresql91/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/local' '--sysconfdir=/opt/local/etc/postgresql91' '--bindir=/opt/local/lib/postgresql91/bin' '--libdir=/opt/local/lib/postgresql91' '--includedir=/opt/local/include/postgresql91' '--datadir=/opt/local/share/postgresql91' '--mandir=/opt/local/share/man' '--with-includes=/opt/local/include' '--with-libraries=/opt/local/lib' '--with-openssl' '--with-bonjour' '--with-readline' '--with-zlib' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--enable-integer-datetimes' '--with-ossp-uuid' 'CC=/usr/bin/gcc-4.2' 'CFLAGS=-pipe -O2 -arch x86_64' 'LDFLAGS=-L/opt/local/lib -arch x86_64' 'CPPFLAGS=-I/opt/local/include -I/opt/local/include/ossp'
CC = /usr/bin/gcc-4.2
CPPFLAGS = -I/opt/local/include -I/opt/local/include/ossp -I/opt/local/include/libxml2 -I/opt/local/include
CFLAGS = -pipe -O2 -arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL = 
LDFLAGS = -L/opt/local/lib -arch x86_64 -L/opt/local/lib -L/opt/local/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lz -lreadline -lm 
VERSION = PostgreSQL 9.1beta1

Dari sana, tarik keluar LIBDIR , INCLUDEDIR, CPPFLAGS, LIBSdan LDFLAGS(salah satu yang saya pikir akan membuat Anda berjalan adalah LIBDIR, namun). Maka Anda akan menjalankan:

setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg

Itu harus dilakukan untuk Anda. Beri tahu saya jika tidak.

Sean
sumber
Saya menggunakan penginstal satu-klik sebagai ganti MacPorts untuk PostgreSQL. Saya tidak tahu apa perintah yang setara.
Jason Swett
Lihat apakah Anda beruntung dengan ini (saya pikir skrip updatedb Mac berjalan pada Sabtu malam):locate pg_config
Sean
Saya masih tidak tahu apa artinya CPPFLAGSatau LDFLAGS(saya tidak tahu apa artinya itu, maaf).
Jason Swett
Oh, tapi locate pg_configtunjukkan padaku beberapa barang. Dan saya mencoba menginstal PostgreSQL via MacPorts dan menggunakan perintah Anda - tidak berhasil.
Jason Swett
1
Diperbarui contoh di atas. Saya percaya ini akan menyelesaikan masalah Anda. Tangkapannya adalah yang LDFLAGStidak disetel ke direktori yang berisi libpq. Lihat detail di atas.
Sean
5

Masalah yang kami hadapi sangat aneh.

ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)

tetapi ketika kami melakukan bundle install pada kenyataannya, bundler tidak diinstal untuk versi ruby ​​yang diinstal oleh rbenv, jadi, ketika kami mengetik bundle install, ia menggunakan bundler sistem.

Jadi sebelum menjalankan bundle install, pastikan Anda telah menginstal bundler dengan menjalankan

gem install bundler
Tibastral
sumber
Ini bekerja dalam kasus saya (macOS High Sierra baru, menggunakan rbenv dan menginstal sebagian besar dengan minuman). Bundle kemungkinan menggunakan benda-benda dari apel, itulah masalahnya ...
saza
3

Saya tidak berpikir Anda memerlukan file pengembangan postgres, semua yang Anda butuhkan harus disertakan dengan installer Anda. Kemungkinan besar jalur yang mereka pasang tidak ada di jalur lingkungan Anda dan oleh karena itu permata tidak dapat menemukannya saat mencoba mengkompilasi pg.

Anda tidak harus menjalankan gem install pgsebagai root, bahkan jika Anda melakukannya kemungkinan PATH Anda (PATH root jika dijalankan dengan sudo) tidak akan berisi info yang diperlukan.

Berikut ini biasanya bekerja untuk saya:

# Might be different depending on where your installer installed postgres 8.3
export PATH=$PATH:/Library/PostgreSQL/8.3/include/
export ARCHFLAGS='-arch x86_64'
gem install pg
Brett Bender
sumber
Menjalankan gem install pg(bersama dengan dua perintah Anda sebelumnya) alih-alih sudo gem install pgmasih memberikan hasil yang sama persis.
Jason Swett
Apakah Anda menggunakan arsitektur 32- atau 64-bit? Sudahkah Anda mencoba yang di atas dengan bendera arsitektur lainnya? Juga apakah Anda mengubah /Library/PostgreSQL/...ke lokasi yang benar di mana pun salinan instalasi postgres Anda?
Brett Bender
Melihat catatan saya tentang melakukan perintah yang saya daftarkan. Sepertinya saya menginstal Postgres via sudo port install postgresql83 postgresql83-server, mirip dengan instruksi ini: flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Tampaknya penginstal mandiri adalah 32-bit, jadi Anda ingin mengatur bendera lengkung Anda menjadi 32-bit bahkan jika mesin Anda 64-bit. Jika Anda tidak bisa menjalankannya, saya sarankan mencopot dan menginstal ulang melalui MacPorts kemudian mencoba instruksi di atas. Semoga itu bisa membantu!
Brett Bender
3

Inilah yang akhirnya melakukannya untuk saya (kombinasi beberapa solusi yang diberikan sebelum bersama dengan posting lain):

$ sudo env ARCHFLAGS = "- arch x86_64" permata instal pg - with-pg-include = / Library / PostgreSQL / 9.6 / include /

Marcus Silveira
sumber
Solusi di atas bekerja untuk saya di Mac OS High Sierra sudo env ARCHFLAGS = "- arch x86_64" permata instal pg -v '1.1.2' - dengan-pg-include = / usr / local / Cellar / postgresql / 10.5 / termasuk Temukan jalur yang tepat untuk folder sertakan dan perbarui yang sesuai.
maniempire
1

The ARCHFLAGSjawaban yang lain telah mengusulkan tidak akan bekerja jika Anda entah bagaimana berakhir dengan versi 64-bit dari postgres (yang homebrew akan menginstal) dan versi 32-bit dari ruby. Untuk beberapa alasan rbenvbersikeras membangun ruby ​​1.9.2-p290 sebagai 32-bit untuk saya, yang membuatnya tidak mungkin untuk terhubung dengan postgres 64-bit.

Periksa arsitektur biner ruby ​​Anda dengan

file `which ruby`

atau jika menggunakan rbenv

file `rbenv which ruby`

Dan bandingkan dengan postgres Anda:

file `which postgres`

Jika ada kecocokan, Anda harus menginstal ulang postgres atau ruby. Dengan rbenv saya menyelesaikan ini hanya dengan beralih ke versi yang berbeda: 1.9.3-p194alih-alih 1.9.2-p290.

Leopd
sumber
1

Beginilah cara saya membuatnya bekerja di Mavericks. Catatan: Saya sudah menginstal postgresql 9.3 dari homebrew.

  1. Perbarui Xcode ke 5.0 dari App Store

  2. Instal alat pengembang baris perintah

    xcode-select --install

  3. Setuju dengan lisensi Xcode

    sudo xcodebuild -license

  4. Instal permata

    ARCHFLAGS = "- arch x86_64" permata instal hal

Michał Szajbe
sumber
1

Jadi pada dasarnya saya melakukan ini ;-)

brew install postgres
Jackie Chan
sumber
Apakah minuman menginstal libpq.so (dylib) sesuai dengan jawaban Anda?
Paul-Sebastian Manole
0

Saya mungkin agak terlambat ke pesta di sini, tetapi dalam kasus saya saya menggunakan rbenv dan meningkatkan ke Ruby 2.2.3. Saya harus menginstal Bundler agar perangkat saya berfungsi, saya memiliki versi sistem lama.

gem install bundler

mchapman17
sumber
0

Seperti disebutkan di atas ini ada hubungannya dengan fakta memiliki dua lengkungan ruby ​​pada rbenv /usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386]yang harus saya lakukan adalah hanya menginstal pgpermata memaksa x86_64lengkungan untuk digunakan dengan perintah ini:

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

Ingatlah untuk memiliki bash_profile memperbarui

Tambahkan jalur postgres Anda, dalam hal ini saya menggunakan aplikasi Postgres ( OSX) alih-alih brew( https://postgresapp.com/ ) secara default ini adalah lokasinya:

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

Muat ulang bash dengan

sudo vi ~/.bash_profile

Setelah melakukan ini saya akhirnya berhasil menginstal pg gem

Semoga ini membantu!

d1jhoni1b
sumber
0

Di Mac Anda dapat mencoba ini (berfungsi untuk saya): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Mengambil: pg-1.0.0.gem (100%) Membangun ekstensi asli dengan: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Ini bisa memakan waktu ... Berhasil menginstal pg-1.0.0 Parsing dokumentasi untuk pg-1.0.0 Menginstal ri dokumentasi untuk pg-1.0.0 Selesai menginstal dokumentasi untuk pg setelah 3 detik 1 permata terpasang

(bagian ini "/Library/PostgreSQL/9.5/include" Anda harus meletakkan jalur Postgres Anda)

Marcos Riveros
sumber