无法运行psql命令,不断收到相同的错误

hbe*_*gel 218 postgresql libreadline psql

我刚刚用homebrew安装了posgresql,当我继续输入命令时

psql
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib
Referenced from: /usr/local/bin/psql
Reason: image not found
[1]    69711 trace trap  psql
Run Code Online (Sandbox Code Playgroud)

有没有人知道什么是错的?

小智 340

我得到了完全相同的错误,但上述答案对我不起作用.我不得不重新安装postgresql.

brew reinstall postgresql

  • 如果您不想丢失本地数据库,这非常繁重.我很幸运'brew switch readline 6.3.8' (7认同)
  • 我的问题似乎与使用brew的python安装有关 (6认同)
  • 如果您还没有使用最新版本的Postgres,请小心这样做.你需要重新安装旧的Postgres和新的Postgres,然后做一个`pg_upgrade` (6认同)
  • 这个人在El Capitan为我做了这件事 (5认同)
  • 如果你认为重新安装psql是一个看似小错误的根本步骤,那么你并不孤单.这个答案:/sf/answers/2903361471/似乎解决了大多数这些答案解决的真正问题. (4认同)
  • 也可以针对特定版本执行此操作,例如:`brew 重新安装 postgresql@9.5` (2认同)

Ste*_*hen 122

关键问题是你的postgresql试图找到libreadline.6.2.dylibreadline的版本7.0,所以只有7的lib链接.

我不认为升级postgresql是一个好主意,它并不容易,可能会导致很多问题,特别是当你已经拥有数据库数据时.

我做的是切换版本readline.检查时brew info readline,你会发现我的版本不同6.3.8,所以我通过执行以下命令切换到该版本:

$ brew switch readline 6.3.8
Run Code Online (Sandbox Code Playgroud)

它将更改为6.3.8并创建链接:

Cleaning /usr/local/Cellar/readline/6.3.8
Cleaning /usr/local/Cellar/readline/7.0.1
Opt link created for /usr/local/Cellar/readline/6.3.8
Run Code Online (Sandbox Code Playgroud)

在这种情况下,所有链接的lib变为6版本,命令行工作:

$ ls /usr/local/opt/readline/lib/
libhistory.6.2.dylib    libhistory.dylib    libreadline.a
libhistory.6.3.dylib    libreadline.6.2.dylib   libreadline.dylib
libhistory.6.dylib  libreadline.6.3.dylib
libhistory.a        libreadline.6.dylib
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用不同版本的readline有不同的应用程序,我认为您应该考虑升级.


更新:06/02/2019

如果没有安装旧版本怎么办?

Homebrew没有提供安装旧版本公式的方法.从v2.0.0开始,它将brew cleanup每30天作为默认行为运行.因此,您可能会意外更新brew和删除旧版本.

以下是安装旧版本的步骤:

  1. 转到homebrew-core目录:
    $ cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
Run Code Online (Sandbox Code Playgroud)
  1. 检查旧公式的哈希值:
    $ git log master -- Formula/readline.rb
Run Code Online (Sandbox Code Playgroud)
  1. 找到相应版本的哈希值
    commit 1dd4221c35716d6bec363ad3425ef93ffe7d9b9f
    Author: BrewTestBot <brew-test-bot@googlegroups.com>
    Date:   Wed Aug 15 21:51:16 2018 +0000

        readline: update 7.0.5 bottle.
Run Code Online (Sandbox Code Playgroud)
  1. 结帐旧配方:
    $ git checkout 1dd4221c35716d6bec363ad3425ef93ffe7d9b9f Formula/readline.rb
Run Code Online (Sandbox Code Playgroud)
  1. 重新安装公式:
    $ brew reinstall readline
Run Code Online (Sandbox Code Playgroud)
  1. 重置回购

按照这些步骤,您可以重新安装旧版本的公式.

  • `brew switch readline 6.3.8`也适用于我 (2认同)

小智 78

如果情况是你有更高版本的readline说7.0.你可以这样做

cd /usr/local/opt/readline/lib    
ln libreadline.7.0.dylib libreadline.6.2.dylib
Run Code Online (Sandbox Code Playgroud)

  • 我不得不创建名为"libreadline.6.dylib"的链接,但这是唯一对我有用的建议. (5认同)

Tro*_*roy 45

如果您没有安装readline,请先安装它:

brew install readline

对我来说,即使我安装了readline,我也遇到了这个错误.重新安装readline就可以了:

brew reinstall readline
Run Code Online (Sandbox Code Playgroud)

  • 重新安装readline没有为我做,但卸载/安装`bash`做了:`brew install --build-from-source bash` (6认同)

小智 29

这对我有用

brew switch readline
Run Code Online (Sandbox Code Playgroud)

这将显示您已安装的版本.选择其中一个.我选了7.0.5

然后我跑了

brew switch readline 7.0.5
Run Code Online (Sandbox Code Playgroud)

readline版本已更新,psql运行顺畅.

  • 也为我工作.psql试图加载`libreadline.7.dylib`,但我使用的是readline 8.0.0.从8.0.0切换到7.0.5解决了这个问题.我希望创建一个符号链接(正如其他人所做的那样)也可以工作,如果我想留在8.0.0.但是,将旧版本链接到旧版本会产生误导,并可能导致其他问题. (2认同)

Jon*_*Jon 21

这对我有用

ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.dylib
Run Code Online (Sandbox Code Playgroud)


Ale*_*uie 19

解决方案是再次强制连接readline.

brew remove readline
brew install readline
brew link readline --force
Run Code Online (Sandbox Code Playgroud)


小智 12

在我看来,问题在于更新readline软件包。在我的情况下,postgres尝试使用/usr/local/opt/readline/lib/libreadline.7.dylib。因此,我刚刚创建了一个符号链接到库/usr/local/opt/readline/lib/libreadline.8.dylib的现有版本。

为我工作:

ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
Run Code Online (Sandbox Code Playgroud)


Ant*_*nne 8

这些解决方案都不适合我; 我不得不跑:

brew upgrade bash
Run Code Online (Sandbox Code Playgroud)

来自:https://github.com/Homebrew/homebrew-core/issues/5799


Mar*_*uce 6

上面的答案对我没有用,所以我想发布最终有效的内容.基于我在这里找到的一个帖子,我不得不卸载readline并重新安装它,但是从源代码开始.

brew uninstall readline
brew install --build-from-source readline
Run Code Online (Sandbox Code Playgroud)

之后,psql错误消失了.


Mic*_*les 5

我有这个问题,对我来说,关键是要reinstallreadlinepostgres。重新安装postgres后,问题已解决。


小智 5

修复 psql 的另一种方法是更新刚刚运行的 postgresql, brew upgrade postgresql因为最新版本将使用 readline 7 版本。