库未加载:/usr/local/lib/libpq.5.4.dylib。

189

我正在开发一个 Rails 应用程序。
使用了 postgresql-9.1.2-1-osx.dmg 安装了 PostgreSQL。
安装了 pg gem。
然后当我执行 rake db:create 命令时, 出现以下错误 -

dlopen(/Users/sathishvc/.rvm/gems/ruby-1.9.3-head@knome-vivacious/gems/pg-0.12.2/lib/pg_ext.bundle, 9): Library not loaded: /usr/local/lib/libpq.5.4.dylib

我检查了是否存在 /usr/local/lib/libpq.5.4.dylib,但并不存在。
所以它应该在系统的其他地方存在,或者我不知道是否需要安装其他软件。

请问有什么建议吗?

22个回答

5

一个简单的解决方案是卸载pg gem:

gem uninstall pg

然后运行

bundle install

就这样!


4

在我升级我的Rails 7应用程序中的Ruby版本(从2.7到3.1.2)后,我遇到了同样的问题。在我的情况下,我不得不在我的Rails应用程序中卸载并重新安装pg gem:

gem uninstall pg
bundle install # (which installed the pg gem with native extensions)

这对我解决了问题。希望这可以帮助面临相同问题的任何人。

3
在我的情况下,卸载/重新安装gem没有帮助。但是我将PostgreSQL库路径添加到我的~/.bash_profile$DYLD_LIBRARY_PATH环境变量中:
export DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.3/lib:$DYLD_LIBRARY_PATH

如果您已经安装了MySQL,那么这行代码看起来可能会像这样:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:/Library/PostgreSQL/9.3/lib:$DYLD_LIBRARY_PATH

当然要注意PostgreSQL路径中的版本号,本文撰写时为9.3。 我正在使用RVM、Ruby 2.0.0和pg gem 0.17.0,在Mac OS X 10.6上。


3

这不是对问题的直接答案,但可能经常出现

如果您使用homebrew升级了PostgreSQL,则可能会有两种附加情况值得关注:

  1. 您以前进行过一些gem版本的修剪
  2. 您的应用程序较旧,无法使用最新版本的pg(我有一个rails 2应用程序无法使用pg 0.17并几乎将服务器挂起:mkmr.log呈指数增长...尝试200GB!)

你实际上可以依赖多个版本的pg

当您运行时

gem uninstall pg

如果您有多个版本,系统会询问您想要删除哪个版本。但那个列表可能对您有用!作为awenkhh的答案的替代,您可以在那里停止并将宝石重置到可接受的版本。

3
在我发布这个问题后不久,我发现 libpq.5.4.dylib 存在于 /Library/PostgreSQL/9.1/lib/ 中。
因此,我创建了以下链接:
lrwxr-xr-x 1 sathishvc admin 43 Jan 28 23:40 /usr/local/lib/libpq.5.4.dylib -> /Library/PostgreSQL/9.1/lib/libpq.5.4.dylib

这解决了当时的问题。


1
在OS 10.15.7中,我无法使用chown username libpq.5.4.dylib命令。所有者是root,我无法更改它。你是如何做到的? - Pychong

2

我在macOS Ventura 13.0.1上遇到了这个问题。

通过homebrew安装了postgresql@14

接着:

mkdir /opt/homebrew/opt/libpq/

mkdir /opt/homebrew/opt/libpq/lib

sudo ln -s /opt/homebrew/opt/postgresql@14/lib/postgresql@14/libpq.5.14.dylib /opt/homebrew/opt/libpq/lib/libpq.5.dylib

之后就可以正常工作啦 :)


2

我在使用安装了Homebrew的Postgres运行Django时,在M1 Mac上一直遇到以下错误。

...
Error loading psycopg2 module:
...
Reason: tried: '/opt/homebrew/opt/postgresql/lib/libpq.5.dylib' (no such file),

这是我修复它的方法:创建一个目录,让代码在其中寻找库文件。

mkdir /opt/homebrew/opt/postgresql/lib/

创建一个符号链接到实际存在的库所在位置。
ln -s /opt/homebrew/opt/postgresql@14/lib/postgresql@14/libpq.5.dylib /opt/homebrew/opt/postgresql/lib/

如果这些方法对您不起作用,请确保确定库的位置以及代码尝试查找它的位置,并相应地进行替换。
运行命令。
locate libpq.5.dylib

这将列出库实际所在的目录。


2

我在Ventura遇到了类似的问题。这发生在我将我的posgresql版本从9.6升级到12之后。

我尝试使用以下命令创建符号链接:

sudo ln -s /opt/homebrew/opt/postgresql@12/lib/postgresql@12/libpq.5.dylib /usr/local/lib/libpq.5.dylib

如果这没有帮助,请尝试:
brew link postgresql@12 --force

它创建了377个符号链接。以下是上述命令的完整输出:

Linking /usr/local/Cellar/postgresql@12/12.15_2... 377 symlinks created.

If you need to have this software first in your PATH instead consider running:
  echo 'export PATH="/usr/local/opt/postgresql@12/bin:$PATH"' >> ~/.zshrc

1

我只需要将 psycopg2-binar 包升级到最新版本(在我的情况下是 2.9.5)。已解决文件丢失问题。


0

使用EDB安装程序安装的Postgresql 13.4和通过Stackbuilder安装的Postgis存在相同的问题。对我来说,没有任何解决方案可用,所以我只是:

  1. 通过brew安装了postgresql和postgis
  2. 将/Library/PostgreSQL/13/lib中的raster2pgsql文件替换为postgis brew版本中的raster2pgsql文件(为了保险起见,请将其保存在另一个文件夹中)

不确定它会如何影响postgresql和postgis EDB版本中的其他文件。


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