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