2012年12月2日

contribモジュールを使ってみよう

PostgreSQL Advent Calendar 2012(全部俺)のDay 2です。

今日はcontribモジュールの使い方についてです。

■contribモジュールとは


PostgreSQLには「contrib」と呼ばれるモジュールがあります。

これは、PostgreSQLのソースコードと一緒に配布されているものの、明示的にコンパイルしてインストールしないとデフォルトではインストールされないという、PostgreSQL周辺の拡張モジュールや便利ツールです。

以下のような感じで、ソースディレクトリの中のcontribというディレクトリ内にいろいろと並んでいます。

[snaga@devsv02 postgresql-9.0.8]$ ls
aclocal.m4  config.status*  contrib/   GNUmakefile     INSTALL   src/
config/     configure*      COPYRIGHT  GNUmakefile.in  Makefile
config.log  configure.in    doc/       HISTORY         README
[snaga@devsv02 postgresql-9.0.8]$ cd contrib/
[snaga@devsv02 contrib]$ ls
adminpack/         fuzzystrmatch/      pgbench/             seg/
auto_explain/      hstore/             pg_buffercache/      spi/
btree_gin/         intagg/             pgcrypto/            sslinfo/
btree_gist/        intarray/           pg_freespacemap/     start-scripts/
chkpass/           isn/                pgrowlocks/          tablefunc/
citext/            lo/                 pg_standby/          test_parser/
contrib-global.mk  ltree/              pg_stat_statements/  tsearch2/
cube/              Makefile            pgstattuple/         unaccent/
dblink/            oid2name/           pg_trgm/             uuid-ossp/
dict_int/          pageinspect/        pg_upgrade/          vacuumlo/
dict_xsyn/         passwordcheck/      pg_upgrade_support/  xml2/
earthdistance/     pg_archivecleanup/  README
[snaga@devsv02 contrib]$
この一覧はオフィシャルマニュアルでは「付録 F. 追加で提供されるモジュール」に記載されています。 このcontribのモジュールを使いこなせるかどうかで、PostgreSQLの便利度は大きく変わってきますので、今回はこのcontribモジュールの使い方を解説します。

なお、最近はソースからコンパイルしてインストールすることは少なくなったと思いますが、RPMからのインストールだと postgresql-contrib というパッケージになっていると思いますので、まずはこれをインストールしておきます。
-bash-3.2$ rpm -qa | grep postgresql90
postgresql90-devel-9.0.10-1PGDG.rhel5
postgresql90-libs-9.0.10-1PGDG.rhel5
postgresql90-server-9.0.10-1PGDG.rhel5
postgresql90-9.0.10-1PGDG.rhel5
postgresql90-contrib-9.0.10-1PGDG.rhel5
-bash-3.2$

■contribモジュールの種類


contribモジュールの中にもいくつか種類があります。

(1) OSコマンドとしてインストールするもの
(2) 各データベースへセットアップ(新規のSQL関数やデータ型の登録)して使うもの
(3) 上記のコンビネーション

などなどです。

今回は(2)について「pgstattuple」と呼ばれるcontribモジュールを題材として解説します。pgstattupleモジュールそのものについては、以下を参照してください。

http://www.postgresql.jp/document/9.0/html/pgstattuple.html

■9.0以前と9.1以降の違いについて


PostgreSQLでは、バージョン9.1で「EXTENSION」と呼ばれる「追加モジュールの管理を容易にする仕組み」が導入されました。

そのため、同じcontribモジュールでもインストール(登録)の方法が9.0以前と9.1以後で変わってきます。

今回は、9.0以前と9.1以降に分けてインストール方法を解説します。

■9.0以前のインストール方法


9.0以前の場合、セットアップ用のSQLスクリプトが準備されていますので、それを使ってデータベースへの登録(SQL関数やデータ型など)を行うことになります。

contribモジュールのセットアップ用のSQLスクリプトは /usr/pgsql-9.0/share/contrib/ ディレクトリに配置されています。ですので、ここに置かれているスクリプトを、自分の利用するデータベースに対して実行して、セットアップを行うことになります。

例えば、データベース名が testdb というデータベース上で pgstattuple モジュールを使いたい場合には、コマンドラインで以下のように実行します。
-bash-3.2$ psql -f /usr/pgsql-9.0/share/contrib/pgstattuple.sql testdb
SET
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
-bash-3.2$
こうすることによって、pgstattupleモジュールに含まれるSQL関数を新規に使えるようになります。
-bash-3.2$ psql testdb
psql (9.0.10)
Type "help" for help.

testdb=# \x
Expanded display is on.
testdb=# SELECT * FROM pgstattuple('pg_database');
-[ RECORD 1 ]------+------
table_len          | 8192
tuple_count        | 5
tuple_len          | 1350
tuple_percent      | 16.48
dead_tuple_count   | 2
dead_tuple_len     | 504
dead_tuple_percent | 6.15
free_space         | 6248
free_percent       | 76.27

testdb=# 
逆に、アンインストールするには以下のように実行します。
-bash-3.2$ psql -f /usr/pgsql-9.0/share/contrib/uninstall_pgstattuple.sql testdb
SET
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
$

■9.1以降のインストール方法


PostgreSQLのバージョン9.1でEXTENSION機能が導入されましたので、9.1以降の場合にはSQLのCREATE EXTENSIONコマンドを使ってインストールします。
testdb=# \x
Expanded display is on.
testdb=# CREATE EXTENSION pgstattuple;
CREATE EXTENSION
testdb=# SELECT * FROM pgstattuple('pg_database');
-[ RECORD 1 ]------+------
table_len          | 16384
tuple_count        | 32
tuple_len          | 8154
tuple_percent      | 49.77
dead_tuple_count   | 5
dead_tuple_len     | 1260
dead_tuple_percent | 7.69
free_space         | 6520
free_percent       | 39.79

testdb=#
逆にアンインストールする場合にはDROP EXTENSIONコマンドを使います。
testdb=# DROP EXTENSION pgstattuple;
DROP EXTENSION
testdb=#

■まとめ


PostgreSQLでは、「contribモジュール」と呼ばれるアドオンモジュールが多数提供されており、これを使いこなせるかどうかでPostgreSQLの運用管理における便利さが大きく変わってきます。

というわけで、今回はそのcontribモジュールの一つであるpgstattupleモジュールについて、バージョン9.0以前の場合とバージョン9.1以降の場合について、それぞれインストールの方法を解説しました。

明日以降のエントリでcontribモジュールを使う場合がありますが、その際にはこのエントリでインストール方法、使い方を確認していただければと思います。

では、また明日。

0 件のコメント:

コメントを投稿