PostgreSQLクライアントライブラリ(libpq)が見つかりません


146

Mac OS X 10.6にPostgreSQL for Railsをインストールしようとしています。最初にMacPortsインストールを試しましたが、うまくいきませんでしたので、ワンクリックDMGインストールを行いました。それはうまくいったようです。

PostgreSQL開発パッケージをインストールする必要があると思いますが、OS Xでそれを行う方法がわかりません。

これが私がやろうとしたときに得られるものです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

postgresqlのバージョン8.3をインストールしましたか、それとも古いインストールを取得していますか?8.3の場合、ライブラリは/Library/PostgreSQL/8.3/libにあるはずです。そこにあるかどうかを確認してください。
Eelke

私はバージョン8.3を実行しました。そうです、すべてがそろっているようです。
Jason Swett、

からの出力を投稿できますpg_configか?これにより、私たちが支援しやすくなります。
justis

muプロジェクトで動作するようにバージョン-v '0.14.0'を追加する必要がありました
Matthieu Rouif

回答:


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

働いた!


2
私のプロジェクトで動作するように、バージョン "env ARCHFLAGS ="-arch x86_64 "gem install -v '0.14.0'"を追加する必要がありました
Matthieu Rouif

6
OS X Mavericksで働いていました。私にとっては、それはenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang '29 / 04/14

17
そして、mavericksで「Postgres.app」を使用する場合は、次のようにする必要があります。env ARCHFLAGS = "-arch x86_64 gem install pg---with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config(Postgres.appバージョン9.3を使用するとします。異なるバージョンを使用するとpg_configの場所が変更される可能性があるためですが、とにかく見つけることができます)
Zhaonan

2
これは私にとってはうまくいき、2時間の停止を破りました。私はレールを初めて使うので、これはイライラさせられました。前のコメントと同様に、私はMavericksでPostgres.appインストーラーを使用していました。ARCHFLGS環境変数が非常に重要であることに気づかなかった。 ここで説明。
GNat 2014

3
問題は、なぜこれが機能するのかということです。"ARCHFLAGS ="-arch x86_64 "は何をするもので、なぜバニラのgemインストールが機能しないのですか?gemをインストールするのはそれほど難しいことではないはずです
Jared Menard

78

私はここで最高評価の答えを試しました:

env ARCHFLAGS="-arch x86_64" gem install pg

しかし、もう一度バンドルインストールを実行しようとすると、同じエラーが発生しました。次に、ARCHFLAGSでバンドル全体をインストールしてみました。

ARCHFLAGS="-arch x86_64" bundle install

私のために働いた!使用しているアーキテクチャに応じて、必ずx86_64をi386に置き換えてください。


2
どうもありがとうございます。これは私のために働いたものです。私はこの問題を1時間以上解決しようとしましたが、このコードはそれを実行したものです-ARCHFLAGS = "-arch x86_64"バンドルのインストール
piratetone

ここでの@piratetoneの追加はHigh Sierraで私のために働きました
-18:22に

@Christineに感謝し、High Sierraで機能しました
Ymow Wu

31

EnterpiseDB .dmgを使用すると、この問題が発生しました。それがあなたが使っていたのと同じだと思うなら、私は正しいアーキテクチャを指定することでそれを機能させました:

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

別のアーキテクチャ(MacPortsを使用するユーザー向けの「-arch x86_64」など)を指定すると書かれているチュートリアルがWebにいくつかありますが、単一ファイルインストールを使用したため、機能しませんでした。


6
x86_64は私のために働きました(Mac OS 10.6.8、homebrewを介してインストールされたPostgreSQL:mxcl.github.com/homebrew
chesterbr

2
解決策を見つけるために何時間も費やしてきましたが、あなたはうまくいきました、bobfet1&@chester ありがとう!:-)))** sudo env ARCHFLAGS = "-arch x86_64" gem install pg **
rassom

24

ヨセミテを使用している場合:

brew install postgres

次に:

ARCHFLAGS="-arch x86_64" gem install pg

そして(オプション)最後に、autovacuumを起動したい場合...

postgres -D /usr/local/var/postgres

21

多分あなたはこれを試すことができます:

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

使用できるライブラリのアーキテクチャを知るには

file /usr/local/lib/libpq.dylib 

私の場合、アーキテクチャは1つだけでした(homebrew経由でインストール)。

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64

+1ライブラリがどのアーキテクチャであるかを知るヒントをありがとう!
2012年

Rubyバイナリのアーキテクチャも確認してください。
Leopd 2012

18

解決策:PostgreSQLをHomebrewで再インストールしました。


1
おめでとうございます!誰かに賞金を与えることを忘れないでください。たとえそれが最終的な解決策ではなかったとしても、数人の人々が一生懸命助けようとしました、そしてあなたが報奨金を提供したときに評判ポイントはすでに費やされました。
justis

2
なぜこれが-1になったのかわからない
Abe Petrillo

また、ARCHFLAGSメソッドを使用する必要がありましたが、homebrewでpostresqlを再インストールするまで機能しませんでした。
Dave Cowart 2013年

ヨセミテ(10.10.3)で働いていました。brew install PostgreSQL
roosevelt

これは私にはうまくいきませんでした。それが「組み込み」のRuby(私が思うに)を他のものの代わりに使用しているという事実と何か関係があるのだろうか:|
rogerdpack 2016年

6

gem適切な環境変数を前に付けることにより、偽造します。MacPortsからインストールする場合は、次の手順を実行できるはずです。

% /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

そこから、引き抜きLIBDIRINCLUDEDIRCPPFLAGSLIBSLDFLAGS(私はあるあなたが実行して取得すると思うことを1 LIBDIRしかしを、)。次に、実行します:

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

それでうまくいくはずです。ない場合はお知らせください。


MacPorts for PostgreSQLの代わりにワンクリックインストーラーを使用しました。同等のコマンドがどうなるかわかりません。
Jason Swett、2011

これで幸運になるかどうかを確認してください(Macのupdatedbスクリプトは土曜日の夜に実行されると思います):locate pg_config
Sean

それが何を意味するのCPPFLAGSLDFLAGSはまだわかりません(それが何なのかわかりません。申し訳ありません)。
Jason Swett、2011年

ああ、でもlocate pg_config私にはいくつかのものを見せてくれました。そして、MacPortsを介してPostgreSQLをインストールし、コマンドを使用してみましたが、機能しませんでした。
Jason Swett、2011年

1
上記の例を更新しました。これで問題は解決すると思います。問題は、LDFLAGSが含まれているディレクトリに設定されていないことでしたlibpq。詳細については、上記を参照してください。
Sean

5

私たちが抱えていた問題はかなり奇妙でした。

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

しかし、実際にバンドルインストールを行ったとき、rbenvによってインストールされたrubyのバージョンにはバンドラーがインストールされていなかったため、bundle installと入力すると、システムのバンドラーが使用されました。

したがって、バンドルインストールを実行する前に、次のコマンドを実行して、バンドルをインストールしたことを確認してください。

gem install bundler

これは私の場合に機能しました(新鮮なmacOS High Sierra、rbenvを使用し、主にbrewでインストール)。バンドルはおそらくアップルからのものを使用していたので、それが問題でした...
saza

3

postgres開発ファイルは必要ないと思います。必要なものはすべてインストーラに含まれているはずです。それらがインストールされているパスが環境パスにない可能性が高いため、gemはpgをコンパイルしようとしたときにそれらを見つけることができません。

gem install pgルートとして実行する必要はありません。実際に実行する場合、PATH(sudoで実行した場合はルートのPATH)に必要な情報が含まれていない可能性があります。

以下は通常私のために働きます:

# 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

gem install pg代わりに(以前の2つのコマンドと共に)を実行してsudo gem install pgも、まったく同じ結果が得られます。
Jason Swett、2011年

32ビットまたは64ビットのアーキテクチャを使用していますか?他のアーキテクチャフラグで上記を試しましたか?また/Library/PostgreSQL/...、postgresインストールのコピーがある場所の正しい場所に変更しましたか?
Brett Bender、2011年

リストしたコマンドの実行に関するメモを調べました。sudo port install postgresql83 postgresql83-server次の手順に似て、私が経由でPostgresをインストールしたように見えます:flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x。スタンドアロンインストーラーは32ビットのようです。そのため、マシンが64ビットの場合でも、アーチフラグを32ビットに設定する必要があります。それが機能しない場合は、MacPorts経由でアンインストールしてから再インストールしてから、上記の手順を試すことをお勧めします。お役に立てば幸いです。
Brett Bender、2011年

3

これが最終的に私のためにやったことです(以前に他の投稿と一緒に提供された複数のソリューションの組み合わせ):

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


上記の解決策は、Mac OS High Sierra sudo env ARCHFLAGS = "-arch x86_64" gem install pg -v '1.1.2'-with-pg-include = / usr / local / Cellar / postgresql / 10.5 / includeで私にとってうまくいきましたインクルードフォルダーの正確なパスを見つけ、それに応じて更新します。
マニエンパイア2018年

1

ARCHFLAGSあなたが何らかの形で(自作がインストールされます)のpostgresの64ビット版とルビーの32ビット版になってしまった場合は他の人はいないでしょう仕事を提案したことを答え。何らかの理由でrbenv、ルビ1.9.2-p290を32ビットとしてビルド主張して、64ビットのpostgresとリンクすることができません。

rubyバイナリのアーキテクチャを確認する

file `which ruby`

またはrbenvを使用している場合

file `rbenv which ruby`

そしてあなたのpostgresと比較してください:

file `which postgres`

不一致がある場合は、postgresまたはrubyを再インストールする必要があります。rbenv 1.9.3-p194では、別のバージョンに切り替えるだけでこれを解決しました:の代わりに1.9.2-p290


1

これが私がMavericksで動作するようにした方法です。注:自作のpostgresql 9.3はすでにインストールしています。

  1. App StoreからXcodeを5.0に更新する

  2. コマンドライン開発者ツールをインストールする

    xcode-select --install

  3. Xcodeライセンスに同意する

    sudo xcodebuild -license

  4. gemをインストールする

    ARCHFLAGS = "-arch x86_64" gem install pg



0

ここのパーティーにはおそらく少し遅れますが、私の場合はrbenvを使用してRuby 2.2.3にアップグレードしていました。Bundlerをインストールして動作させるには、古いシステムバージョンが必要でした。

gem install bundler


0

上で述べたように、これはrbenvに2つのルビーアーチを持っているという事実と関係があり、/usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386]私がしなければならないことは、pggem forcing x86_64archをこのコマンドで使用するようにインストールするだけでした。

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

bash_profile最新の情報を忘れずに

postgresのパスを追加します。この場合、デフォルトOSXではbrewhttps://postgresapp.com/)ではなくPostgres app()を使用します。これは次の場所です。

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

bashを再読み込み

sudo vi ~/.bash_profile

これを行った後、私は最終的に正常にインストールすることができました pg gem

お役に立てれば!


0

Macではこれを試すことができます(私にとってはうまくいきます):gem install pg-with-pg-include = / Library / PostgreSQL / 9.5 / include Fetching:pg-1.0.0.gem(100%)Build with Native extensions with: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'これには時間がかかる場合があります... pg-1.0.0が正常にインストールされましたpg-1.0.0のドキュメントを解析していますpg-1.0.0のriドキュメントをインストールしていますドキュメントのインストールが完了しましたpgの場合、3秒後に1つのgemがインストールされます

(この部分「/ライブラリ/PostgreSQL/9.5/include」にはPostgresパスを配置する必要があります)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.