既存環境に影響を与えずに pg_dump をインストールする


概要

既存環境に影響を与えずに pg_dump の特定バージョンをインストールした備忘です。
※PostgreSQL環境の話です

背景

DB の全テーブルを対象に、特定文字列のデータがあるかどうか調べたいということって良くありますよね。(私はあります)
その際のアプローチとして SQL でやるやり方もありますが、dump 取得して grep する方が楽なので私はこっちをよく使います。

で、pg_dump を使うわけですが DB が RDS 等を使っていた場合、接続元と pg_dump のバージョンが異なっていてエラーになることもまぁ良くあります。

pg_dump: server version: 9.6.19; pg_dump version: 9.5.3
pg_dump: aborting because of server version mismatch

※バージョンは適当な数値にしています

基本的にサーババージョンは変更できないので、pg_dump のバージョンを合わせにいくわけですが、既存環境は極力触りたくないという心理が働きます。
なので既存環境の pg_dump はそのままに、サーババージョンと一致させた pg_dump をインストールしたいというのが背景です。

せっかくなので、手順を残しておきます。

手順

1. PostgreSQLソースを取得

特定バージョンの pg_dump はソースからインストールします。

https://www.postgresql.org/ftp/source/

ここでの例では、サーババージョンが 9.6.19 なのでそのバージョンを取得します。

https://www.postgresql.org/ftp/source/v9.6.19/

サーバで直接取得した方が楽なので、上記から tar.gz を指定してリンクをコピーしておく。

# お作法に則り /usr/local/src へ
cd /usr/local/src
wget https://ftp.postgresql.org/pub/source/v9.6.19/postgresql-9.6.19.tar.gz

# 解凍
tar xzf postgresql-9.6.19.tar.gz
cd postgresql-9.6.19

※サーバのアウトバウンド通信(https)が許可されていること

2. インストール

ソースインストールのいつものやつです。

# インストール先をつくっておく
mkdir /usr/local/postgresql-9.6.19/

# いつもの
# 上記インストール先を指定
./configure --prefix=/usr/local/postgresql-9.6.19/ --with-pgport=5432
make
make install

3. 接続確認

インストールされた pg_dump を指定してダンプ取得できるか確認できたら完了です。

/usr/local/postgresql-9.6.18/bin/pg_dump --data-only --inserts -U <user> -h <DB_HOST> <DB_NAME> >db.dump

参考