Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

CREATE EXTENSION dblinkに失敗するので解決した。

概要

タイトルの通り

CREATE EXTENSION dblink;

の実行が

ERROR: could not access file "$libdir/dblink": No such file or directory

みたいなエラーで失敗する。ときの解決方法です。

環境は

  • PostgreSQL9.6.3
  • CentOS7

です。

解決する

エラーメッセージの確認

まずはエラーメッセージの解読ですが

ERROR: could not access file "$libdir/dblink": No such file or directory

"$libdir/dblink"ファイルにアクセスできません。ファイルやディレクトリが見つかりません。

という感じでしょうか。

$libdirってなんでしょ、ということで調べてみたら

pg_config —pkglibdir

のコマンドで出力される場所が、$libdirということみたいです。

公式ドキュメント(ココ)を参照すると、--pkglibdirは動的に読み込ませたいモジュールを格納する場所とのこと。

つまりは、ここ($libdir)にdblink.soがいないのでエラーとなっている模様。

dblink.soを作成するということで、makeすればいいんでしょってことでdblinkディレクトリを探すのですが・・・ない?

yum list installed | grep postgres

で確認してみたところ、contribがインストールされていない。

「この環境を構築したのは誰だァッ!!」 と憤慨しそうになるけど。

よく考えてみたら

f:id:r_tihiro:20170824073228p:plain
そう、僕だ。

ということを思い出しました。

人の記憶って本当に頼りになりません。

とりあえず

yum search postgres | grep contrib

でcontribの名前を確認して

yum install postgresql-contrib.x86_64

でインストール完了!

CREATE EXTENSION dblink;

成功しました。ので無事にdblinkが使えるようになりました。

無事に解決して良かったです。

ちなみに

$PGBASE/share/postgersql/extension/dblink--1.2.sql を実行しても、「dblink--1.2.sqlを実行するんじゃなくて、CREATE EXTENSION dblinkしてくれ」みたいなエラーとなりました。

※$PGBASE=「PostgreSQLのインストールディレクトリとする」

まとめ

というわけで、CREATE EXTENSION dblinkに失敗した際の対応についての記事でした。 今回の原因としてはcontribが未インストールだったということですので、dblink以外の拡張機能が使えない場合にも、同様の対応でOKです。

あと、せっかくなのでdblinkモジュールについて解説記事でも書きたいものですね。