如何在Ubuntu上安装PostgreSQL的pg gem?

309

我想要安装Ruby的PostgreSQL's pg宝石(gem)。

我执行了以下命令:

gem install pg

我使用 RVM 安装了 Ruby 1.9.2。

上述命令显示了以下错误信息。

错误信息如下:

Building native extensions.  This could take a while...

ERROR:  Error installing pg:

ERROR: Failed to build gem native extension.

/home/User/.rvm/rubies/ruby-1.9.2-preview3/bin/ruby extconf.rb

checking for pg_config... yes
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=/home/User/.rvm/rubies/ruby-1.9.2-preview3/bin/ruby
 --with-pg
 --without-pg
 --with-pg-config
 --without-pg-config
 --with-pg-dir
 --without-pg-dir
 --with-pg-include
 --without-pg-include=${pg-dir}/include
 --with-pg-lib
 --without-pg-lib=${pg-dir}/lib
 --enable-static-build
 --disable-static-build
 --with-pqlib
 --without-pqlib
 --with-libpqlib
 --without-libpqlib
 --with-ms/libpqlib
 --without-ms/libpqlib

Gem files will remain installed in /home/user/.rvm/gems/ruby-1.9.2-preview3/gems/pg-0.9.0 for inspection.

Results logged to /home/user/.rvm/gems/ruby-1.9.2-preview3/gems/pg-0.9.0/ext/gem_make.out

我不知道错误在哪里...


3
在Ubuntu 18.04上安装PostgreSQL服务器开发所有依赖包,请运行命令apt install postgresql-server-dev-all - Richard Peck
19个回答

731

你需要安装带有 PostgreSQL 头文件的 PostgreSQL 开发软件包。

sudo apt-get install libpq-dev

3
对于像我一样对Ubuntu非常新的人,但确实是新手,请先使用“sudo apt-get install aptitude”命令进行安装。 :) - Haris Krajina
1
尝试了各种组合。即使重新安装了Postgres和libpq,也没有运气。问题仍然存在。 - Krishna Prasad Varma
sudo apt-get install libpq-dev完美运行....当然,本地安装程序需要dev libs来编译ruby的"pg" gem。 - andre baresel
6
对于Cent/RedHat系列的发行版,您需要安装yum install postgresql-devel软件包。 - Kyril
1
我有一种感觉,对于某些人来说,这可能无法正常工作,因为他们的Ubuntu版本不同。在我的13.04上,使用Postgres 9.1失败了。 - Rebs
显示剩余3条评论

42

在阅读和尝试了许多其他笔记中的内容后,我在 Ubuntu Lucid 10.04 上使用了一些 Maverick 软件包和 RVM(ruby 1.9.2-p290、rvm 1.10.2 rubygems 1.8.15、rails 3.0.1、postgres 8.4.10)找到了以下一行代码的解决方法:

gem install pg  --   --with-pg-lib=/usr/lib   

结果:

Building native extensions.  This could take a while...  
Successfully installed pg-0.13.1  
1 gem installed  
Installing ri documentation for pg-0.13.1...  
Installing RDoc documentation for pg-0.13.1...  

{耶 - 终于成功了}!!请注意,在我的Ubuntu/Postresql安装中,从运行pg_config获得的输出中,LIBS变量中缺少-lpq项目!!

还有,为什么在某些地方要从pq切换到pg,这对新手来说很容易混淆?

我仍然不理解双重设置——和—with(选项),但无论如何,我已经超出了我的能力范围。


2
"--"通常用于将第一个命令的参数与第二个命令分开,例如,在这种情况下,是extmod的configure脚本。 - Timothy Meade
非常感谢分享这个解决方案。我被卡在这里一整天了,很高兴遇到了这篇文章。 - whizcreed

34

在Ubuntu中,这对我有用,希望能帮到你:

sudo apt-get install libpq-dev

gem install pg  --   --with-pg-lib=/usr/lib 

30

我正在使用Ubuntu 12.10,并运行以下命令:

apt-get install libpq-dev

帮了我一个忙 - 在那之后运行gem install pg -v "0.14.1",现在一切都好了


29

安装libpq-dev对我没有起作用。我还需要安装build-essential。

sudo apt-get install libpq-dev build-essential

27

需要添加软件包

sudo apt-get install libpq-dev

如何在RoR中安装pg gem


16

Ubuntu用户的简单解决方案...

首先卸载所有的postgres软件包,然后运行以下命令...

sudo apt-get install postgresql
sudo apt-get install postgresql-client libpq5 libpq-dev

# for rvm (single user)
mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm 

# for rvm (multi-user)
mv /usr/local/rvm/usr/lib /usr/local/rvm/usr/lib_rvm

gem install pg  --   --with-pg-lib=/usr/lib

然后运行'bundle install'。一切都会很好。祝你有美好的一天!


1
如果有人想知道如何卸载所有的Postgres包,可以执行以下命令:sudo apt-get remove --purge postgresql postgresql-9.3(或者你安装的其他版本)。 - user3720516

13

sudo apt-get install postgresql-client libpq5 libpq-dev 然后执行 gem install pg


请在您的答案中添加一些上下文,解释为什么这样做有效。这也仅适用于基于Debian的系统。 - JensV

9
对于.RVM用户来说,这将更好:
rvmsudo gem install pg -- --with-pg-lib=/usr/lib 

在我看到jdupont的版本后,它对我起了作用。


7
如果您已安装了libpq-dev但仍然遇到此问题,很可能是由于OpenSSL的libssl和其他库存在冲突 - Ubuntu系统版本位于/usr/lib中(libpq构建对其进行了编译),而RVM安装的第二个版本位于$HOME/.rvm/usr/lib(如果是系统安装,则为/usr/local/rvm/usr/lib)。您可以通过暂时重命名$HOME/.rvm/usr/lib并查看"gem install pg"是否正常工作来验证这一点。
为了解决这个问题,让rvm使用系统OpenSSL库重新构建(您可能需要手动从rvm/usr/lib目录中删除libssl.*和libcrypto.*):
rvm reinstall 1.9.3 --with-openssl-dir=/usr

这最终为我在Ubuntu 12.04上解决了问题。

谢谢您的回答!Ubuntu版本越新,Ruby构建版本越旧,发生OpenSSL不匹配的可能性就越大。 - mikeycgto
除了这个以外,没有其他方法有效!非常感谢@mike-blackwell。在你来帮助之前,我已经放弃了所有希望。 - varagrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接