psqlしたらreadlineのエラーが出るようになって

rbenvとphpenvの共存で色々やってたら、突然psql(9.3.4)がエラーを吐くようになった。

% psql -V                         
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /usr/local/bin/psql
  Reason: image not found

readlineとは?

readlineはpsqlでデフォルト使用になっている「行入力支援ライブラリ」との事。
postgresqlのドキュメント( https://www.postgresql.jp/document/9.3/html/install-requirements.html )を見たら
コマンドの記憶などに使っているらしい。
なのでpsqlではエラーが出るけど、postgresql自体に問題はなく、GUIではちゃんと動いている。

Cellerにreadline 6.3のインストール

libreadline.6.dylibがない!との事ですが、brew info readlineしたらreadlineは7しかないので6をインストールする。
homebrewのcellerにインストールすればhomebrewが認識してくれるはずなので
/usr/local/Celler以下にインストールしてみよう
ここ( http://core.ring.gr.jp/pub/GNU/readline/ )から6.3のソースをDL。
以下のオプションをつけてconfigureしたらmake&make install(testはない)

% ./configure --prefix=/usr/local/Cellar/readline/6.3 --mandir=/usr/local/Cellar/readline/6.3/share/man --infodir=/usr/local/Cellar/readline/6.3/share/info --enable-multibyte

homebrewでreadlineを7から6に切り替え

再度brew info

% brew info readline
readline: stable 7.0 [keg-only]
Library for command-line editing
https://tiswww.case.edu/php/chet/readline/rltop.html
/usr/local/Cellar/readline/6.3 (39 files, 2M)
  Built from source
/usr/local/Cellar/readline/7.0 (46 files, 2.1M) *
  Built from source on 2016-10-06 at 17:03:00

6が認識されたので、switch

% brew switch readline 6.3
Cleaning /usr/local/Cellar/readline/6.3
Cleaning /usr/local/Cellar/readline/7.0
Opt link created for /usr/local/Cellar/readline/6.3

コマンドのエイリアスを確認

% ls -la /usr/local/opt/readline/lib 
total 2984
()
-r-xr-xr-x   1 hoge  admin   303128 10  6 17:35 libreadline.6.3.dylib
lrwxr-xr-x   1 hoge  admin       21 10  6 17:35 libreadline.6.dylib -> libreadline.6.3.dylib
()

無事libreadline.6.dylibのエイリアスが作成されていますね。

% psql -V
psql (PostgreSQL) 9.3.4

無事に動きました。

追記:この後rails cしたらreadline7じゃないとダメってエラー出て、場合によってswitchするという謎の状況に陥っているので早くなんとかしたい。
/usr/local/opt/readline/lib/に6と7両方のリンク貼ったらだめかなぁ〜。


Profile picture

ぴーやま
プログラミングを嗜んでします。中華料理で出てくるたまごふわふわのコーンスープが好きです。