2023.08.02[Wed]

[Postgres] pg_dump のバージョン不整合にdockerイメージで対応する

  • Database

目次

  • - 準備
  • - イメージのpull
  • - 実行
  • - おわりに

茄子です。
PostgreSQLのバックアップコマンドpg_dumpは、実行する側とデータベースサーバー側のPostgresのバージョンが合ってないとエラーになってしまいます。

サーバーに合わせたバージョンを別途インストールすることもできますが、dockerイメージを使うことでより手軽に対応できますので、紹介したいと思います。

準備

dockerがインストールされていない場合は、dockerをインストールします。お使いのOS用のリンクからインストールしてください。
公式サイト: https://docs.docker.com/engine/install/

docker --version などでインストール出来ていることを確認します

イメージのpull

Docker Hub の postgres イメージ : https://hub.docker.com/_/postgres
リンクのページの「Supported tags and respective Dockerfile links」には、執筆時(2023年7月28日)では 15.3, 14.8 etc のサポート範囲内の各メジャーバージョンの最新パッチ版がリストアップされています。ですが、15.1 など以前のマイナーバージョンも引き続き利用可能で、指定すればpullできます。「Tags」タブから検索することもできます。

今回は、試しに 15.1 をpullしてみます。

docker pull postgres:15.1

pullできたか確認します。

docker images | grep postgres

実行

コマンドは以下です。

docker run -v {ローカルの出力先}:/root/pg_dump postgres:15.1 pg_dump --dbname=postgresql://{ユーザー名}:{password}@{Postgresサーバーのホスト}/{対象のデータベース名} --file=/root/pg_dump/{出力ファイル名}

例:
docker run -v /Users/nasu/Q/techlab/backup:/root/pg_dump postgres:15.3 pg_dump --dbname=postgresql://nasu:nasu0123@mypostgres.jp/techlabdata --file=/root/pg_dump_$(date +'%Y%m%d-%H%M%S')

-v : マウントするフォルダのパスです。
--dbname : 各値は別々のオプション(username, hostなど)にもできますが、パスワードを別にするとプロンプトで聞かれるようになるので、今回はスクリプトなどにも使いやすいこの形式の方を採用しました。
--file : 出力先ファイル名です。これはコンテナの中のパスになります。/root/pg_dump/は今回の例では、-vでローカル出力先フォルダがマウントされているフォルダです。

おわりに

Postgresに限らずこうしたちょっとしたバージョン違いなどにdockerは便利ですね。
何かのお役に立てれば幸いです。

Share

Shopifyの多言語対応における豆知識。複数の翻訳アプリが共存できるShopify Flowを利用して、購入があった際条件を付けオーダーにタグをつける方法