Không thể tìm thấy thư viện máy khách PostgreSQL (libpq)


146

Tôi đang cố gắng cài đặt PostgreSQL cho Rails trên Mac OS X 10.6. Đầu tiên tôi đã thử cài đặt MacPorts nhưng không được vì vậy tôi đã cài đặt DMG chỉ bằng một cú nhấp chuột. Điều đó dường như làm việc.

Tôi nghi ngờ tôi cần cài đặt các gói phát triển PostgreSQL nhưng tôi không biết làm thế nào để làm điều đó trên OS X.

Đây là những gì tôi nhận được khi tôi cố gắng làm 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

Bạn đã cài đặt phiên bản 8.3 của postgresql hay nó đang chọn một số cài đặt cũ? Nếu đó là thư viện 8.3 thì nên nằm trong / L Library / PostgreQuery / 8/3 / ib hãy kiểm tra xem nó có ở đó không.
Eelke

Tôi đã làm phiên bản 8.3 và, vâng, có vẻ như mọi thứ đều ở đó.
Jason Swett

Bạn có thể gửi đầu ra từ pg_config? Điều đó sẽ giúp chúng tôi dễ dàng hơn để giúp đỡ.
justis

Tôi đã phải thêm phiên bản -v '0.14.0' để nó hoạt động với dự án mu
Matthieu Rouif

Câu trả lời:


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

ĐÃ LÀM VIỆC!


2
Tôi đã phải thêm phiên bản "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'" để nó hoạt động với dự án của tôi
Matthieu Rouif

6
Làm việc cho OS X Mavericks. Đối với tôi, đó làenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang

17
Và nếu bạn sử dụng "Postgres.app", trong mavericks, bạn nên làm: env ARCHFLAGS = "- arch x86_64 gem cài đặt pg - --with-pg-config = / Ứng dụng / Postgres.app / Nội dung / Phiên bản / 9.3 / bin / pg_config (Giả sử bạn sử dụng Postgres.app phiên bản 9.3, vì vị trí của pg_config có thể thay đổi nếu bạn sử dụng phiên bản khác, nhưng dù sao bạn cũng có thể tìm thấy nó)
Zhaonan

2
Điều này làm việc cho tôi và phá vỡ một 2 giờ dừng lại. Tôi mới sử dụng đường ray và điều này thật khó chịu. Giống như người bình luận trước, tôi đang sử dụng trình cài đặt Postgres.app trên Mavericks. Không nhận ra biến env ARCHFLGS rất quan trọng. Giải thích tại đây.
GNat

3
Câu hỏi là, tại sao điều này làm việc? "ARCHFLAGS =" - arch x86_64 "làm gì và tại sao cài đặt đá quý vanilla không hoạt động? Việc cài đặt một viên đá quý không phải là điều khó khăn.
Jared Menard

78

Tôi đã thử câu trả lời hàng đầu ở đây:

env ARCHFLAGS="-arch x86_64" gem install pg

Nhưng khi tôi thử chạy gói cài đặt lại, nó cũng gặp lỗi tương tự. Sau đó, tôi đã thử cài đặt toàn bộ gói với ARCHFLAGS như sau:

ARCHFLAGS="-arch x86_64" bundle install

Đã làm cho tôi! Đảm bảo thay thế x86_64 bằng i386 tùy thuộc vào kiến ​​trúc bạn có.


2
Cảm ơn bạn rất nhiều. Đây là những gì làm việc cho tôi. Tôi đã cố gắng giải quyết vấn đề này trong một giờ cộng với bây giờ và mã này là cái đã làm - ARCHFLAGS = "- cài đặt gói arch x86_64"
piratetone

Sự bổ sung của @piratetone ở đây đã làm việc cho tôi trên High Sierra
bắt đầu từ

Được đánh giá cao cho @Christine, nó hoạt động với tôi trên High Sierra
Ymow Wu 27/12/18

31

Tôi chỉ gặp vấn đề này khi sử dụng EnterpiseDB .dmg. Nếu đó là suy nghĩ giống như bạn đã sử dụng, tôi đã làm cho nó hoạt động bằng cách chỉ định kiến ​​trúc phù hợp:

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

Có một số hướng dẫn trên web cho biết chỉ định một kiến ​​trúc khác (như "-arch x86_64" cho những người đã sử dụng MacPorts) nhưng nó không hoạt động với tôi vì tôi đã sử dụng cài đặt tệp duy nhất.


6
x86_64 làm việc cho tôi (Mac OS 10.6.8, PostgreSQL cài đặt qua homebrew: mxcl.github.com/homebrew )
chesterbr

2
Đã sử dụng hàng giờ để tìm giải pháp và bạn đã làm việc, bobfet1 & @chester. Cảm ơn! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" cài đặt đá quý pg **
rassom

24

Nếu sử dụng Yosemite:

brew install postgres

Sau đó:

ARCHFLAGS="-arch x86_64" gem install pg

(tùy chọn) cuối cùng, nếu bạn muốn khởi chạy autovacuum ...

postgres -D /usr/local/var/postgres

21

Có lẽ bạn có thể thử cái này:

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

Để biết kiến ​​trúc của thư viện của bạn, bạn có thể sử dụng

file /usr/local/lib/libpq.dylib 

trong đó chỉ có 1 kiến ​​trúc trong trường hợp của tôi (được cài đặt qua homebrew):

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

+1 Cảm ơn bạn đã gợi ý về việc biết thư viện của tôi là kiến ​​trúc nào!
Spike

Cũng kiểm tra kiến ​​trúc của nhị phân ruby ​​của bạn.
Leopd

18

Giải pháp: cài đặt lại PostgreSQL với Homebrew.


1
Chúc mừng! Hãy nhớ trao tiền thưởng cho ai đó. Một vài người đã cố gắng hết sức để giúp đỡ, ngay cả khi đó không phải là giải pháp cuối cùng và điểm danh tiếng đã được chi tiêu khi bạn đưa ra tiền thưởng.
justis

2
Không chắc chắn lý do tại sao điều này có -1, hoạt động với tôi khi không phải các phương pháp khác đã làm
Abe Petrillo

Cuối cùng tôi cũng đã phải sử dụng phương pháp ARCHFLAGS, nhưng nó không hoạt động cho đến khi cài đặt lại postresql với homebrew.
Dave Cowart

Làm việc cho Yosemite (10.10.3). cài đặt bia PostgreSQL
roosevelt

Điều này đã không làm việc cho tôi. Tự hỏi liệu nó có liên quan gì đến thực tế là tôi đang sử dụng Ruby "tích hợp" thay vì bất cứ thứ gì khác không: |
rogerdpack

6

Giả mạo gembằng cách thêm tiền tố vào các biến môi trường thích hợp. Nếu bạn đã cài đặt từ MacPorts, bạn sẽ có thể thực hiện quy trình sau:

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

Từ đó, kéo ra LIBDIR, INCLUDEDIR, CPPFLAGS, LIBSLDFLAGS(một trong đó tôi nghĩ sẽ giúp bạn chạy là LIBDIR, tuy nhiên). Sau đó, bạn sẽ chạy:

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

Chuyện đó nên làm vì bạn. Hãy cho tôi biết nếu nó không.


Tôi đã sử dụng trình cài đặt một lần nhấp thay vì MacPorts cho PostgreSQL. Tôi không biết lệnh tương đương sẽ là gì.
Jason Swett

Xem bạn có may mắn với điều này không (tôi nghĩ kịch bản cập nhật của Mac chạy vào tối thứ Bảy):locate pg_config
Sean

Tôi vẫn không biết điều đó có nghĩa là gì CPPFLAGShoặc LDFLAGS(tôi không biết đó là gì, xin lỗi).
Jason Swett

Ồ, nhưng locate pg_configđã cho tôi thấy một số thứ, mặc dù. Và tôi đã thử cài đặt PostgreSQL qua MacPorts và sử dụng lệnh của bạn - không hoạt động.
Jason Swett

1
Cập nhật ví dụ trên. Tôi tin rằng điều này sẽ giải quyết vấn đề của bạn. Cái bẫy LDFLAGSkhông được đặt vào thư mục chứa libpq. Xem ở trên để biết chi tiết.
Sean

5

Vấn đề chúng tôi gặp phải khá kỳ lạ.

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

nhưng trên thực tế khi chúng tôi cài đặt gói, gói không được cài đặt cho phiên bản ruby ​​được cài đặt bởi rbenv, vì vậy, khi chúng tôi nhập cài đặt gói, nó đã sử dụng gói của hệ thống.

Vì vậy, trước khi chạy cài đặt gói, hãy chắc chắn rằng bạn đã cài đặt gói bằng cách chạy

gem install bundler

Điều này hoạt động trong trường hợp của tôi (macOS High Sierra mới, sử dụng rbenv và cài đặt chủ yếu với brew). Bundle có khả năng sử dụng những thứ từ táo, đó là vấn đề ...
saza

3

Tôi không nghĩ rằng bạn cần các tệp phát triển postgres, mọi thứ bạn cần phải có trong trình cài đặt của bạn. Nhiều khả năng là đường dẫn mà chúng được cài đặt không nằm trong đường dẫn môi trường của bạn và do đó gem không thể tìm thấy chúng khi nó cố gắng biên dịch pg.

Bạn không cần phải chạy gem install pg với quyền root, trên thực tế nếu bạn thực hiện thì có khả năng PATH của bạn (root PATH nếu chạy w / sudo) sẽ không chứa thông tin cần thiết.

Những điều sau đây thường làm việc cho tôi:

# 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

Chạy gem install pg(cùng với hai lệnh trước của bạn) thay vì sudo gem install pgvẫn cho kết quả chính xác như nhau.
Jason Swett

Bạn đang trên kiến ​​trúc 32 hoặc 64 bit? Bạn đã thử ở trên với cờ kiến ​​trúc khác? Bạn cũng đã thay đổi /Library/PostgreSQL/...vị trí chính xác của bất cứ nơi nào bản sao cài đặt postgres của bạn?
Brett Bender

Nhìn vào ghi chú của tôi về việc thực hiện các lệnh tôi liệt kê. Có vẻ như tôi đã cài đặt Postgres qua sudo port install postgresql83 postgresql83-server, tương tự như các hướng dẫn sau: flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Có vẻ như trình cài đặt độc lập là 32 bit, vì vậy bạn muốn đặt cờ vòm của mình thành 32 bit ngay cả khi máy của bạn là 64 bit. Nếu bạn không thể làm cho nó hoạt động, tôi khuyên bạn nên gỡ cài đặt và cài đặt lại qua MacPorts sau đó thử các hướng dẫn ở trên. Mong rằng sẽ giúp!
Brett Bender

3

Đây là những gì cuối cùng đã làm cho tôi (kết hợp nhiều giải pháp được cung cấp trước đó cùng với các bài đăng khác):

$ sudo env ARCHFLAGS = "- arch x86_64" cài đặt đá quý pg - with-pg-include = / Library / PostgreQuery / 9.6 / include /


Giải pháp trên đã có hiệu quả với tôi trong 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 / Xác định vị trí đường dẫn chính xác cho thư mục bao gồm và cập nhật tương ứng.
maniempire

1

Câu ARCHFLAGStrả lời mà những người khác đã đề xuất sẽ không hoạt động nếu bạn kết thúc bằng phiên bản postgres 64 bit (mà homebrew sẽ cài đặt) và phiên bản ruby ​​32 bit. Đối với một số lý dorbenv khăng khăng xây dựng ruby ​​1.9.2-p290 là 32 bit đối với tôi, điều này khiến cho không thể liên kết với các postgres 64 bit.

Kiểm tra kiến ​​trúc nhị phân ruby ​​của bạn với

file `which ruby`

hoặc nếu sử dụng rbenv

file `rbenv which ruby`

Và so sánh với postgres của bạn:

file `which postgres`

Nếu có một trận đấu sai, bạn sẽ cần phải cài đặt lại postgres hoặc ruby. Với rbenv tôi đã giải quyết điều này chỉ bằng cách chuyển sang một phiên bản khác: 1.9.3-p194thay vì 1.9.2-p290.


1

Đây là cách tôi làm cho nó hoạt động trên Mavericks. Lưu ý: Tôi đã cài đặt postgresql 9.3 từ homebrew.

  1. Cập nhật Xcode lên 5.0 từ App Store

  2. Cài đặt công cụ phát triển dòng lệnh

    chọn xcode - cài đặt

  3. Đồng ý với giấy phép Xcode

    sudo xcodebuild -license

  4. Cài đặt đá quý

    ARCHFLAGS = "- vòm x86_64" cài đặt đá quý pg


1

Vì vậy, về cơ bản tôi đã làm điều này ;-)

brew install postgres

Có phải brew cài đặt libpq.so (dylib) như câu trả lời của bạn không?
Paul-Sebastian Manole

0

Có lẽ tôi đến bữa tiệc muộn một chút, nhưng trong trường hợp của tôi, tôi đã sử dụng rbenv và nâng cấp lên Ruby 2.2.3. Tôi đã phải cài đặt Bundler để giúp tôi làm việc, tôi đã có một phiên bản hệ thống cũ.

gem install bundler


0

Như đã đề cập ở trên, điều này có liên quan đến thực tế là có hai vòm ruby ​​trên 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]điều tôi phải làm chỉ đơn giản là cài đặt pggem buộc x86_64arch phải được sử dụng với lệnh này:

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

Nhớ bash_profilecập nhật

Thêm đường dẫn của postgres của bạn, trong trường hợp này tôi đang sử dụng ứng dụng Postgres ( OSX) thay vì brew( https://postgresapp.com/ ) theo mặc định đây là vị trí:

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

Tải lại bash với

sudo vi ~/.bash_profile

Sau khi làm điều này, tôi đã có thể cài đặt thành công pg gem

Hi vọng điêu nay co ich!


0

Trên Mac, bạn có thể thử cái này (hoạt động với tôi): gem install pg - with-pg-include = / Library / PostgreQuery / 9.5 / include Fetching: pg-1.0.0.gem (100%) Xây dựng các tiện ích mở rộng gốc với: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Việc này có thể mất một lúc ... Cài đặt thành công tài liệu phân tích pg-1.0.0 cho pg-1.0.0 Cài đặt tài liệu ri cho pg-1.0.0 Hoàn tất cài đặt tài liệu cho pg sau 3 giây cài đặt 1 gem

(phần này "/ Thư viện / bài viết / ngày 9 tháng 9 năm 2014", bạn phải đặt đường dẫn Postgres của mình)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.