Impossible de trouver la bibliothèque cliente PostgreSQL (libpq)

146

J'essaye d'installer PostgreSQL for Rails sur Mac OS X 10.6. J'ai d'abord essayé l'installation de MacPorts mais cela ne s'est pas bien passé, alors j'ai fait l'installation DMG en un clic. Cela semblait fonctionner.

Je soupçonne que j'ai besoin d'installer les packages de développement PostgreSQL mais je ne sais pas comment faire cela sur OS X.

Voici ce que j'obtiens lorsque j'essaye de faire 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
la source
Avez-vous installé la version 8.3 de postgresql ou récupère-t-il une ancienne installation? S'il s'agit de 8.3, les bibliothèques doivent être dans /Library/PostgreSQL/8.3/lib, veuillez vérifier si elle est là.
Eelke
J'ai fait la version 8.3 et, oui, on dirait que tout est là.
Jason Swett
Pouvez-vous publier la sortie à partir de pg_config? Cela devrait nous faciliter l’aide.
justis
J'ai dû ajouter la version -v '0.14.0' pour qu'elle fonctionne avec le projet mu
Matthieu Rouif

Réponses:

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

TRAVAILLÉ!

Siddhartha Mukherjee
la source
2
J'ai du ajouter la version "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'" pour qu'elle fonctionne avec mon projet
Matthieu Rouif
6
A travaillé pour OS X Mavericks. Pour moi, c'estenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang
17
Et si vous utilisez "Postgres.app", sous des non-conformistes, vous devriez faire: env ARCHFLAGS = "- arch x86_64 gem install pg - --with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config (Supposons que vous utilisez Postgres.app version 9.3, car l'emplacement de pg_config peut être changé si vous utilisez une version différente, mais de toute façon vous pouvez le trouver)
Zhaonan
2
Cela a fonctionné pour moi et a rompu un arrêt de 2 heures. Je suis nouveau sur les rails et c'était frustrant. Comme le commentateur précédent, j'utilisais le programme d'installation Postgres.app sur Mavericks. Je n'avais pas réalisé que la variable ARCHFLGS env était si importante. Explication ici.
GNat
3
La question est, pourquoi cela fonctionne-t-il? Que fait "ARCHFLAGS =" - arch x86_64 ", et pourquoi l'installation de la gemme vanille ne fonctionne-t-elle pas? Il ne devrait pas être aussi difficile d'installer une gemme.
Jared Menard
78

J'ai essayé la réponse la mieux notée ici:

env ARCHFLAGS="-arch x86_64" gem install pg

Mais quand j'ai essayé d'exécuter à nouveau l'installation de bundle, il y avait la même erreur. Ensuite, j'ai essayé l'installation complète du bundle avec ARCHFLAGS comme ceci:

ARCHFLAGS="-arch x86_64" bundle install

A travaillé pour moi! Assurez-vous de remplacer x86_64 par i386 en fonction de l'architecture dont vous disposez.

Christine Loh
la source
2
Merci beaucoup. C'est ce qui a fonctionné pour moi. J'essaie de résoudre ce problème depuis une heure et plus maintenant, et c'est ce code qui l'a fait - ARCHFLAGS = "- arch x86_64" bundle install
piratetone
L'ajout de @piratetone ici a fonctionné pour moi sur High Sierra
tnaught
Apprécié pour @Christine, ça a marché pour moi sur High Sierra
Ymow Wu
31

J'avais juste ce problème lors de l'utilisation d'EnterpiseDB .dmg. Si c'est la même chose que vous pensez utilisée, je l'ai fait fonctionner en spécifiant la bonne architecture:

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

Il y a quelques tutoriels sur le web qui disaient de spécifier une architecture différente (comme "-arch x86_64" pour les personnes qui utilisaient MacPorts) mais cela ne fonctionnait pas pour moi car j'ai utilisé l'installation de fichier unique.

bobfet1
la source
6
x86_64 a fonctionné pour moi (Mac OS 10.6.8, PostgreSQL installé via homebrew: mxcl.github.com/homebrew )
chesterbr
2
Ont utilisé des heures pour trouver une solution et la vôtre a travaillé, bobfet1 & @chester. Merci! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" gem install pg **
rassom
24

Si vous utilisez Yosemite:

brew install postgres

Ensuite:

ARCHFLAGS="-arch x86_64" gem install pg

Et (optionnel) enfin, si vous souhaitez lancer l'autovacuum ...

postgres -D /usr/local/var/postgres
etusm
la source
21

Peut-être que vous pouvez essayer celui-ci:

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

Pour connaître l'architecture de votre bibliothèque, vous pouvez utiliser

file /usr/local/lib/libpq.dylib 

ce qui n'a donné qu'une architecture dans mon cas (installée via homebrew):

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
ybart
la source
+1 Merci pour l'indication de savoir quelle architecture était ma bibliothèque!
Spike
Vérifiez également l'architecture de votre binaire ruby.
Leopd
18

Solution: réinstallé PostgreSQL avec Homebrew.

Jason Swett
la source
1
Félicitations! N'oubliez pas d'attribuer la prime à quelqu'un. Quelques personnes ont fait de leur mieux pour vous aider, même si ce n'était pas la solution finale, et les points de réputation ont déjà été dépensés lorsque vous avez offert la prime.
justis le
2
Je ne sais pas pourquoi cela a un -1, a fonctionné pour moi alors qu'aucune des autres méthodes ne l'a fait
Abe Petrillo
J'ai également fini par avoir à utiliser la méthode ARCHFLAGS, mais cela n'a fonctionné qu'après la réinstallation de postresql avec homebrew.
Dave Cowart
A travaillé pour Yosemite (10.10.3). brew installer PostgreSQL
roosevelt
Cela n'a pas fonctionné pour moi. Je me demande si cela a quelque chose à voir avec le fait que j'utilise le Ruby "intégré" (je pense) au lieu de quoi que ce soit d'autre: |
rogerdpack
6

Fake out gemen préfixant les variables d'environnement appropriées. Si vous installez à partir de MacPorts, vous devriez pouvoir suivre la procédure suivante:

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

A partir de là, retirez le LIBDIR, INCLUDEDIR, CPPFLAGS, LIBSet LDFLAGS(celui que je pense que vous obtiendrez en cours d' exécution est LIBDIR, cependant). Ensuite, vous courriez:

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

Cela devrait le faire pour vous. Faites-moi savoir si ce n'est pas le cas.

Sean
la source
J'ai utilisé le programme d'installation en un clic au lieu de MacPorts pour PostgreSQL. Je ne sais pas quelle serait la commande équivalente.
Jason Swett
Voyez si vous avez de la chance avec ça (je pense que le script mis à jour de Mac s'exécute samedi soir):locate pg_config
Sean
Je ne sais toujours pas ce que cela signifierait pour CPPFLAGSou LDFLAGS(je ne sais pas ce que c'est, désolé).
Jason Swett
Oh, mais locate pg_configm'a montré des trucs, cependant. Et j'ai simplement essayé d'installer PostgreSQL via MacPorts et d'utiliser votre commande - cela n'a pas fonctionné.
Jason Swett
1
Mise à jour de l'exemple ci-dessus. Je pense que cela résoudra votre problème. Le problème était que ce LDFLAGSn'était pas défini sur le répertoire qui contenait libpq. Voir ci-dessus pour plus de détails.
Sean
5

Le problème que nous avions était assez étrange.

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

mais quand nous avons fait une installation de bundle en fait, le bundler n'était pas installé pour la version de ruby ​​qui avait été installée par rbenv, donc, quand nous avons tapé bundle install, il utilisait le bundler du système.

Donc, avant d'exécuter l'installation du bundle, assurez-vous d'avoir installé le bundler en exécutant

gem install bundler
Tibastral
la source
Cela a fonctionné dans mon cas (frais macOS High Sierra, utilisant rbenv et installant principalement avec brew). Bundle utilisait probablement des éléments d'Apple, c'était le problème ...
saza
3

Je ne pense pas que vous ayez besoin des fichiers de développement postgres, tout ce dont vous avez besoin aurait dû être inclus avec votre programme d'installation. Il est plus probable que le chemin sur lequel ils sont installés ne se trouve pas dans le chemin de votre environnement et que, par conséquent, gem ne puisse pas les trouver lorsqu'il essaie de compiler pg.

Vous ne devriez pas avoir à exécuter en gem install pgtant que root, en fait, si vous le faites, il est probable que votre PATH (le PATH de la racine s'il est exécuté avec sudo) ne contiendra pas les informations nécessaires.

Ce qui suit fonctionne généralement pour moi:

# 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
la source
Exécuter gem install pg(avec vos deux commandes précédentes) au lieu de sudo gem install pgdonne toujours exactement les mêmes résultats.
Jason Swett
Êtes-vous sur une architecture 32 ou 64 bits? Avez-vous essayé ce qui précède avec l'autre drapeau d'architecture? Avez-vous également changé /Library/PostgreSQL/...l'emplacement correct de l'emplacement de votre copie de l'installation postgres?
Brett Bender
J'ai regardé dans mes notes sur l'exécution des commandes que j'ai énumérées. On dirait que j'ai installé Postgres via sudo port install postgresql83 postgresql83-server, similaire à ces instructions: flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Il semble que le programme d'installation autonome soit 32 bits, vous voulez donc définir vos indicateurs d'archive sur 32 bits même si votre machine est 64 bits. Si vous ne pouvez pas le faire fonctionner, je vous suggère de désinstaller et de réinstaller via MacPorts, puis d'essayer les instructions ci-dessus. J'espère que cela pourra aider!
Brett Bender
3

C'est ce qui a finalement fait pour moi (combinaison de plusieurs solutions fournies auparavant avec d'autres articles):

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

Marcus Silveira
la source
La solution ci-dessus a fonctionné pour moi dans 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 Recherchez le chemin exact du dossier d'inclusion et mettez-le à jour en conséquence.
maniempire
1

La ARCHFLAGSréponse que d'autres ont proposée ne fonctionnera pas si vous vous retrouvez avec une version 64 bits de postgres (que l'homebrew installera) et une version 32 bits de ruby. Pour une raison quelconque, rbenvinsiste sur la construction de ruby ​​1.9.2-p290 en 32 bits pour moi, ce qui rend impossible la liaison avec des postgres 64 bits.

Vérifiez l'architecture de votre binaire ruby ​​avec

file `which ruby`

ou si vous utilisez rbenv

file `rbenv which ruby`

Et comparez avec vos postgres:

file `which postgres`

En cas de non-correspondance, vous devrez réinstaller postgres ou ruby. Avec rbenv, j'ai résolu ce problème simplement en passant à une version différente: 1.9.3-p194au lieu de 1.9.2-p290.

Léopd
la source
1

C'est ainsi que je l'ai fait fonctionner sur Mavericks. Remarque: j'avais déjà installé postgresql 9.3 à partir de homebrew.

  1. Mettre à jour Xcode vers 5.0 depuis l'App Store

  2. Installer les outils de développement en ligne de commande

    xcode-select - installer

  3. Accepter la licence Xcode

    sudo xcodebuild -license

  4. Installer la gemme

    ARCHFLAGS = "- arch x86_64" gem install pg

Michał Szajbe
la source
1

Donc en gros, j'ai fait ça ;-)

brew install postgres
Jackie Chan
la source
Est-ce que brew installe le libpq.so (dylib) comme votre réponse l'indique?
Paul-Sebastian Manole
0

Je suis probablement un peu en retard à la fête ici, mais dans mon cas, j'utilisais rbenv et je passais à Ruby 2.2.3. J'ai dû installer Bundler pour que le mien fonctionne, j'avais une ancienne version du système.

gem install bundler

mchapman17
la source
0

Comme mentionné ci-dessus, cela a à voir avec le fait d'avoir deux arcs rubis sur 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]ce que je devais faire était simplement d'installer la pggemme forçant x86_64arch à être utilisé avec cette commande:

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

N'oubliez pas d'avoir votre bash_profileà jour

Ajoutez le chemin de vos postgres, dans ce cas, j'utilise l'application Postgres ( OSX) au lieu de brew( https://postgresapp.com/ ) par défaut, c'est l'emplacement:

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

Recharger bash avec

sudo vi ~/.bash_profile

Après avoir fait cela, j'ai finalement réussi à installer pg gem

J'espère que cela t'aides!

d1jhoni1b
la source
0

Sur Mac, vous pouvez essayer ceci (fonctionne pour moi): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Récupération: pg-1.0.0.gem (100%) Construire des extensions natives avec: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Cela pourrait prendre un certain temps ... Installation réussie de la documentation de pg-1.0.0 Analyse syntaxique pour pg-1.0.0 Installation de la documentation ri pour pg-1.0.0 Installation de la documentation terminée pour pg après 3 secondes 1 gemme installée

(cette partie "/Library/PostgreSQL/9.5/include" vous devez mettre votre chemin Postgres)

Marcos Riveros
la source