pg_repack のインストール

わけあって PostgreSQL 拡張の pg_repack をインストールしてみたのでメモを残しておきます。

DBまわりは門外漢ですが、まぁ、最小限のロックでテーブルの再編成をしてくれるものみたいです。PostgreSQL には CLUSTER や VACUUM FULL ってものがありますが、このあたりの機能は ACCESS EXCLUSIVE という一番強いロックを取るのでオンライン状態では実施できないみたいです。

GitHub - reorg/pg_repack: Reorganize tables in PostgreSQL databases with minimal locks

pg_repack 1.3.1 -- Reorganize tables in PostgreSQL databases with minimal locks

https://www.postgresql.jp/document/9.3/html/explicit-locking.html


以下、インストール手順です。

PostgreSQL は既にインストール済みの前提になります。PostgreSQL のインストールは以下のエントリーに書いておりますのでよろしければご参照ください。

PostgreSQL 9.3.5 をソースコードからコンパイルする ( CentOS 6.2 ) - プログラム日記


1. ダウンロード

インストールディレクトリを作成します。

mkdir /usr/local/postgres/extension
chown postgres:postgres /usr/local/postgres/extension
su - postgres
cd /usr/local/postgres/extension

今回は現時点最新と思われる 1.3.3 を利用することにしたので、以下からダウンロードします。

pg_repack: PostgreSQL module for data reorganization / PostgreSQL Extension Network

wget http://api.pgxn.org/dist/pg_repack/1.3.3/pg_repack-1.3.3.zip


2. コンパイル、インストール

unzip pg_repack-1.3.3.zip
cd pg_repack-1.3.3/
make

make install する際に sudo したいので、visudo で以下の変更を行っておきます。

Defaults    env_reset をコメントアウト
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin をコメントアウト
Defaults    env_keep += "PATH" を追記

上記変更後、make install します。

sudo make install

pg_repack コマンドや、pg_repack.so が作成されていれば無事インストールされているはずです。

$ which pg_repack
/usr/local/postgres/9.3.5/bin/pg_repack
$ ls /usr/local/postgres/extension/pg_repack-1.3.3/lib | grep pg_repack
pg_repack--1.3.3.sql
pg_repack.control
pg_repack.control.in
pg_repack.so
pg_repack.sql.in
uninstall_pg_repack.sql


3. pg_repack のロード

インストール後、データベースに対して psql コマンド で pg_repack のロードを行っておく必要があるようです。

psql -c "CREATE EXTENSION pg_repack" -d testdb


簡単ですが、以上になります。

[環境情報]
CentOS7
PostgreSQL 9.3.5
pg_repack 1.3.3