【ゆるふわDocker部】任意バージョンのPostgreSQLコマンドを実行して外部DBに接続する

morimorihogeです。そろそろラナンの探索マップがコンプリートできそうです。 前回の記事でゆるふわDocker部の提案をしましたので、ゆるゆるとDocker Tips的なものを垂れ流していこうと思います。今回はバージョン依存の強めなPostgreSQLのCLIコマンドをDocker経由で簡単に実行する方法を紹介します(今回は9.3系ですが、適宜他のバージョンで読み替えても使えるはず)。Dockerを使うことでローカルシステムにインストールされていないPostgreSQLクライアントで外部のPostgreSQLサーバに接続することが簡単になります。 確認環境はMac OS X El Capitan、Docker 1.9.1で、Docker Toolboxビルトインのboot2dockerを使っています。いつものことですがご利用は自己責任でお願いします。 PostgreSQLのクライアントバージョン問題とは MySQLと並んで人気OSS系RDBMSのPostgreSQLですが、よく引っかかる問題としてバージョン依存性が強いというものがあります。 例えば、クライアント側のバージョンが9.2.9でサーバ側のバージョンが9.3.1のケースでpg_dumpコマンドを実行すると、以下の様なエラーが発生して接続に失敗しまいます。 pg_dump -h somehost -U someuser -W somedb Password: pg_dump: server version: 9.3.1; pg_dump version: 9.2.9 pg_dump: aborting because of server version mismatch DBサーバとアプリサーバを分けている時なんかには割と発生しがちな問題ですね。他にもたまに古めのサーバに接続しないといけないときはちょこちょこあるので、困ることがあります。 Dockerをでかいバイナリコマンドとして使う 今回実行したかったのはpg_dumpコマンドだけで、dumpデータさえ取れれば後は手元にインポートして使うぜ、という状態でした。そこで、使いたいバージョンのPostgreSQL containerを取得してそのバージョンのPostgreSQLコマンドを使うという用途でDockerを使うことにしました。 今回はDocker HubでPostgreSQL関連のDocker Imageを漁って使ってみましたので、手順を追っていきます。他のプログラムでも同様の手順で大体はなんとかなると思います。 Docker Hubから使えそうなイメージを探してくる まずは、Docker Hubの画面一番上の検索から「postgres」で検索すると、 オフィシャルのpostgres imageが見つかります。 Tag一覧のページを見ると、9.3系では9.3.10が生きてることが確認できます。 というわけで、欲しいDocker Imageは「postgres:9.3.10」であることが特定できました。 しかし、ここで良く見ると、9.3系のTagで古いビルドバージョンのもの(9.3.9以下)は削除されていっていることが分かります。これだと9.3.11が出た後に最新をpullすると9.3.10が使えなくなってしまいますね。 そこで、よくよくREADMEを読んでみると、9.3.10の他に9.3というTagがあることが分かります。 というわけで、9.3系であれば良いということであれば、Tagには9.3.10ではなく9.3を指定するのが良さそうです。最終的に使うDocker Imageは「postgres:9.3」が良さそうです。 … Continue reading 【ゆるふわDocker部】任意バージョンのPostgreSQLコマンドを実行して外部DBに接続する