hbejgel
hbejgel

Reputation: 4847

Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib

I just installed PostgreSQL with Homebrew and when I go on to type the command

psql

I get the following error:

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

What's wrong?

Upvotes: 253

Views: 77528

Answers (22)

Prince Abalogu
Prince Abalogu

Reputation: 395

I tried all these terminal commands and nothing worked, so I decided to fix it manually...

Open finder and hit Command + Shift + G.

Go to this folder /usr/local/opt/readline/lib/

You should see multiple versions of these files:

libreadline.6.dylib
libreadline.7.0.dylib

Rename any of them to whichever library is not loaded.

this is: /usr/local/opt/readline/lib/libreadline.6.2.dylib
mine was: /usr/local/opt/readline/lib/libreadline.6.dylib

Upvotes: 4

anvy zhang
anvy zhang

Reputation: 807

If the situation is you have a higher version readline, say 7.0, you can do this:

cd /usr/local/opt/readline/lib
ln libreadline.7.0.dylib libreadline.6.2.dylib

Upvotes: 79

Anthony Dahanne
Anthony Dahanne

Reputation: 5053

None of those solutions worked for me; I had to run:

brew upgrade bash

From: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib #5799

Upvotes: 8

Hustlion
Hustlion

Reputation: 2373

You could try brew doctor and see what it says.

Possibly all you need is brew link --overwrite bash.

For me, I just upgraded Homebrew since OS X v10.11 (El Capitan) had some security upgrade that affects my /usr folder. During the Homebrew upgrade, the Bash link is broken, and this is what brew doctor tells me.

So I just run brew link --overwrite bash and everything's fine.

Upvotes: 0

Yuanqi Cao
Yuanqi Cao

Reputation: 101

I had this problem when I updated readline to version 7 by accident. I uninstalled readline and Homebrew reminded me 6.3.8 was still installed. It seems that version 7 is not working with PostgreSQL at the moment.

Upvotes: 4

Mark Pruce
Mark Pruce

Reputation: 945

Troy's answer didn't work for me, so I wanted to post what did eventually work. Based on a thread I found here, I had to uninstall readline and the install it again but from source.

brew uninstall readline
brew install --build-from-source readline

After that, the psql error went away.

Upvotes: 6

ph4n70m
ph4n70m

Reputation: 320

This had helped me: uninstall all instances of readline and PostgreSQL:

export CPPFLAGS=-I/usr/local/opt/readline/include
export LDFLAGS=-L/usr/local/opt/readline/lib

And install PostgreSQL.

Upvotes: 2

dafunkeemonkee
dafunkeemonkee

Reputation: 4105

I was getting the exact same error, but the previous answers didn't work for me. I had to reinstall PostgreSQL.

brew reinstall postgresql

Upvotes: 390

Alex Palcuie
Alex Palcuie

Reputation: 4984

The solution is to force the linking of readline again.

brew remove readline
brew install readline
brew link readline --force

Upvotes: 20

nilansh bansal
nilansh bansal

Reputation: 1494

The following commands worked for me:

brew reinstall postgresql
brew postgresql-upgrade-database

Upvotes: 3

sindhu_sp
sindhu_sp

Reputation: 759

This worked for me

brew switch readline

This would display the versions you have installed. Pick one out of them. I picked 7.0.5

I then ran

brew switch readline 7.0.5

The readline version got updated, and psql ran smoothly.

Upvotes: 32

Stephen
Stephen

Reputation: 3982

The key problem is that your postgresql was trying to find the libreadline.6.2.dylib but your readline is version 7.0, so only 7's lib is linked.

I don't think upgrading postgresql is a good idea, it's not easy and may cause a lot of problem, especially when you already have database data.

What I do, is to switch the version of readline. When you check brew info readline, you will find different versions, mine is 6.3.8, so I switch to that version by executing:

$ brew switch readline 6.3.8

It will change to 6.3.8 and create the link:

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

In this case, all the linked lib becomes to 6 version, and command line works:

$ 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

However, if you have different apps using the different version of readline, I think you should consider upgrading.


Update: 06/02/2019

What if the old version is not installed?

Homebrew doesn't provide a way to install old version formula. And since v2.0.0, it will run brew cleanup as default behaviours every 30 days. Therefore, you may accidentally update brew and delete the old version.

Here are the steps to install old version:

  1. Go to homebrew-core directory:
    $ cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
  1. Check the hash for old Formula:
    $ git log master -- Formula/readline.rb
  1. Find the corresponding version of the hash value
    commit 1dd4221c35716d6bec363ad3425ef93ffe7d9b9f
    Author: BrewTestBot <[email protected]>
    Date:   Wed Aug 15 21:51:16 2018 +0000

        readline: update 7.0.5 bottle.
  1. Checkout to old formula:
    $ git checkout 1dd4221c35716d6bec363ad3425ef93ffe7d9b9f Formula/readline.rb
  1. Reinstall the formula:
    $ brew reinstall readline
  1. Reset the repo

Following those steps, you can reinstall the old version of formula.

Upvotes: 135

Eugeny Maksimov
Eugeny Maksimov

Reputation: 181

It seems to me the problem is about update readline package. postgres tryied to use /usr/local/opt/readline/lib/libreadline.7.dylib in my case. So i just created a symlink to existing version of library /usr/local/opt/readline/lib/libreadline.8.dylib.

worked for me:

ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib

Upvotes: 14

Jon
Jon

Reputation: 565

this worked for me

ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.dylib

Upvotes: 23

Erik Trautman
Erik Trautman

Reputation: 6029

For some unknown reason, when this error popped up for the next version of Readline, my RVM seemed unable to locate the right one no matter how I symlinked it, throwing:

Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)

I ended up adding the gem rb-readline to my Gemfile and doing another bundle install and it started working.

I... just don't know.

Upvotes: 0

user9869932
user9869932

Reputation: 7387

In my case the correct answer did not fix the problem.

The problem started after running brew doctor and adding export PATH="/usr/local/bin:$PATH" to my ~/.zshrc file.

Removing

export PATH="/usr/local/bin:$PATH" 

from ~/.zshrc got it solved.

Upvotes: 0

sp89
sp89

Reputation: 418

You might want to check if you have anything else symlinked to postgresql. I had previously linked to the postgres93 package, which, as of May '17, is unsupported and has been removed. Removing that link and then relinking worked for me:

brew unlink postgresql93
brew link postgresql

Upvotes: 0

finx
finx

Reputation: 1493

I tried all the previews answers, and nothing worked. The only thing that really worked for me was:

brew link postgresql

Upvotes: 3

zegomesjf
zegomesjf

Reputation: 51

Another way to fix psql is update postgresql just running brew upgrade postgresql since the newest version will use readline 7 version.

Upvotes: 5

Tornike
Tornike

Reputation: 1254

I found this solution helpful

brew upgrade bash

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

Upvotes: 1

Micah Bales
Micah Bales

Reputation: 191

I had this issue, and the key for me was to reinstall both readline and postgres. Once postgres was reinstalled, the issue was resolved.

Upvotes: 5

Troy
Troy

Reputation: 21902

If you don't have readline installed, first install it:

brew install readline

For me, I was getting this error, even though I had readline installed. Reinstalling readline did the trick:

brew reinstall readline

Upvotes: 46

Related Questions