Return to readline version 6.x in Homebrew to fix Postgresql?

PostgresqlHomebrewReadline

Postgresql Problem Overview


I'm no Homebrew expert but I think it has "upgraded" me from readline version 6.x to 7.0 sometime after 9/15/16:

eat@eric-macbook:Homebrew$ brew info readline
readline: stable 7.0 (bottled) [keg-only]
Library for command-line editing
https://tiswww.case.edu/php/chet/readline/rltop.html
/usr/local/Cellar/readline/7.0 (45 files, 2M)

This has caused headaches for my 9.4.5 Homebrew version of Postgresql (I need the older 9.4 for comparability reasons):

eat@eric-macbook:~$ psql --version
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /usr/local/Cellar/postgresql/9.4.5/bin/psql
  Reason: image not found
Trace/BPT trap: 5

Unfortunately I can't find a 6.x version of readline on Homebrew to revert to - only 7.0 seems to be available(?).

My question is twofold:

  • Is the the readline version mismatch the cause of my postgres/psql problem?
  • If so, how do I return to 6.x with Homebrew to correct the problem?

Thank you in advance!

Postgresql Solutions


Solution 1 - Postgresql

To answer the specific question.

You can switch between version of installed brew packages which are still around locally as explained in this question: https://stackoverflow.com/questions/3987683/homebrew-install-specific-version-of-formula

To downgrade to readline 6.x the following command worked for me:

brew switch readline 6.3.8

Solution 2 - Postgresql

Just reinstall postgresql94 package, the PostgreSQL 9.4 will use the new readline package:

brew reinstall postgresql94

Solution 3 - Postgresql

NOTE: This answer might be outdated due to the changes in the branch (as reported by Andrew, the commit disappear)

To those who still facing this issue but cannot download the readline 6.3.8 from the homebrew package. You can try this solution. (Refer from here)

# Uninstall this incompatible version
brew uninstall readline

# Go to the local clone of homebrew-core
cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core

# Move to the homebrew-core revision that had 6.3.8
git checkout 35fed817726f61a9d40c8420582f6fde59eb5f14

# Re-install readline
brew reinstall readline

# Switch back to HEAD
git checkout master

# Pin readline so this can't happen again
brew pin readline

Solution 4 - Postgresql

For people coming from Rails with this issue you can just add the readline gem and run bundle install.

gem 'rb-readline' #Fixed readline error

Solution 5 - Postgresql

I was able to overcome this with a blanket brew upgrade (upgrade all brew-managed packages).

Solution 6 - Postgresql

If you would use Sam Kah Chiin's solution, you can ignore the 404.

Apply the extra change so it would work on new macOS:

diff --git a/Formula/readline.rb b/Formula/readline.rb
index 08d3728..d67e5e4 100644
--- a/Formula/readline.rb
+++ b/Formula/readline.rb
@@ -16,7 +16,7 @@ class Readline < Formula
     sha256 "c129333634dd00ab2267ae9c531fca1f5cc50dd519ed3399918289fdfdf2663b" => :lion
   end

-  keg_only :shadowed_by_osx, <<-EOS.undent
+  keg_only :shadowed_by_macos, <<~EOS
     OS X provides the BSD libedit library, which shadows libreadline.
     In order to prevent conflicts when programs look for libreadline we are
     defaulting this GNU Readline installation to keg-only.

Do sudo update_dyld_shared_cache at the end

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionerickyView Question on Stackoverflow
Solution 1 - PostgresqlDanEEStarView Answer on Stackoverflow
Solution 2 - PostgresqlvitalieView Answer on Stackoverflow
Solution 3 - PostgresqlSam Kah ChiinView Answer on Stackoverflow
Solution 4 - Postgresqlbkunzi01View Answer on Stackoverflow
Solution 5 - PostgresqlSeth BroView Answer on Stackoverflow
Solution 6 - Postgresqluser2679290View Answer on Stackoverflow