2017年2月21日火曜日

PostgreSQL 9.4のContribモジュール

こんにちは。

PostgreSQL 9.4 から追加された Contrib モジュールは 3 つですが、ソースコードに付属する全ての Contrib モジュールを簡単に紹介します。

◆ PostgreSQL 9.4 の Contrib モジュール

♦ PostgreSQL 9.4 の Contrig モジュールは 45 個あります。

Appendix F. Additional Supplied Modules

http://www.postgresql.org/docs/9.4/static/contrib.html

F.1. adminpack (管理)

F.2. auth_delay (セキュリティ)

F.3. auto_explain (管理)

F.4. btree_gin (PostgreSQL開発)

F.5. btree_gist (PostgreSQL開発)

F.6. chkpass (セキュリティ - 非推奨)

F.7. citext (データ型)

F.8. cube (データ型)

F.9. dblink (機能拡張)

F.10. dict_int (全文検索)

F.11. dict_xsyn (全文検索)

F.12. dummy_seclabel (PostgreSQL開発)

F.13. earthdistance (機能拡張)

F.14. file_fdw (機能拡張)

F.15. fuzzystrmatch (機能拡張)

F.16. hstore (機能拡張)

F.17. intagg (機能拡張)

F.18. intarray (機能拡張)

F.19. isn (データ型)

F.20. lo (データ型)

F.21. ltree (データ型)

F.22. pageinspect (PostgreSQL開発)

F.23. passwordcheck (セキュリティ)

F.24. pg_buffercache (管理)

F.25. pgcrypto (セキュリティ)

F.26. pg_freespacemap (管理)

F.27. pg_prewarm (管理)

F.28. pgrowlocks (管理)

F.29. pg_stat_statements (管理)

F.30. pgstattuple (管理)

F.31. pg_trgm (全文検索)

F.32. postgres_fdw (機能拡張)

F.33. seg (データ型)

F.34. sepgsql (セキュリティ)

F.35. spi (システム開発)

F.36. sslinfo (システム開発)

F.37. tablefunc (機能拡張)

F.38. tcn (システム開発)

F.39. test_decoding (PostgreSQL開発)

F.40. test_parser (PostgreSQL開発)

F.41. test_shm_mq (PostgreSQL開発)

F.42. tsearch2 (全文検索)

F.43. unaccent (全文検索)

F.44. uuid-ossp (データ型)

F.45. xml2 (機能拡張)

♦ PostgreSQL 9.4 は 9.3 と比べると、3 つのモジュールが増えています。

F.27. pg_prewarm

F.39. test_decoding

F.41. test_shm_mg

どの様なモジュールがあるか知っていると役立つこともあります。種別に分けて、Contrib モジュールを簡単に紹介します。

◆ データ型

■■ F.7. citext (8.4以上)

http://www.postgresql.org/docs/9.4/static/citext.html

citext は大文字 / 小文字を無視したテキスト型です。

SELECT * FROM tab WHERE lower(col) = LOWER(?);

とすることで大文字 / 小文字を無視した比較が可能ですが、冗長です。citext を導入すると

CREATE TABLE users (
    nick CITEXT PRIMARY KEY,
    pass TEXT   NOT NULL
);

等として大文字 / 小文字を無視するカラムを定義できます。

■■ F.8. cube (8.3以上)

http://www.postgresql.org/docs/9.4/static/cube.html

多次元体を表す cube データ型を定義します。演算子も定義されており、大小、同一、重なり、包含を演算できます。

■■ F.19. isn (8.3以上)

http://www.postgresql.org/docs/9.4/static/isn.html

ISBN などの商品コードのデータ型です。EAN13 / ISBN13 / ISMN13 / ISSN13 / ISBN / ISMN / ISSN / UPC をサポートしています。

■■ F.16. hstore (8.3以上)

http://www.postgresql.org/docs/9.4/static/hstore.html

キーバリュー型のデータ型を定義します。オペレータ、関数が定義されキーバリュー型データを効率良く扱えます。

■■ F.20. lo (8.3以上)

http://www.postgresql.org/docs/9.4/static/lo.html

PostgreSQL のラージオブジェクトはテーブルのカラムと無関係に存在します。この仕様は JDBC などの BLOB がテーブルからの参照として保存されていると仮定してる場合に困ります。lo モジュールはラージオブジェクトをテーブルの一部として取り扱い易くします。

lo モジュールの利用例

CREATE TABLE image (title TEXT, raster lo);

CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON image
    FOR EACH ROW EXECUTE PROCEDURE lo_manage(raster);

■■ F.21. ltree (8.3以上)

木構造を持つラベルのデータ型、ltree 型とその演算子、関数を提供します。分類などを管理する場合に便利なデータ型です。

■■ F.33. seg(8.3以上)

http://www.postgresql.org/docs/9.4/static/seg.html

線分、浮動小数点を表現するseg型を追加します。6.5 という値を 6.50 と有効桁まで保存します。計測値を取り扱う場合に便利です。

■■ F.44. uuid-ossp (8.3以上)

http://www.postgresql.org/docs/9.4/static/uuid-ossp.html

OSSP のライブラリを利用し UUID バージョン1 / 3 / 4 / 5 をサポートする UUID 型を追加します。 ITU-T Rec. X.667, ISO/IEC 9834-8:2005, RFC 4122 によって UUID の生成方法は指定されています。

◆ セキュリティ

■■ F.2. auth_delay (9.1以上)

http://www.postgresql.org/docs/9.4/static/auth-delay.html

認証失敗時に再認証までの遅延時間を設定可能にします。ブルートフォース攻撃対策として有効です。

■■ F.6. chkpass (8.3以上)

http://www.postgresql.org/docs/9.4/static/chkpass.html

パスワード認証用のモジュールですが、UNIX の DES を利用した crypt() をそのまま利用しています。このため、最初の 8 文字しか利用しません。pgcryto を利用すべきです。

■■ F.23. passwordcheck (9.0以上)

http://www.postgresql.org/docs/9.4/static/passwordcheck.html

CrackLib を利用し、脆弱なパスワードの利用を禁止します。

■■ F.25. pgcrypto (8.3以上)

http://www.postgresql.org/docs/9.4/static/pgcrypto.html

ハッシュ関数、PGP 機能、暗号機能、ランダム生成器やパスワードハッシュ関数を提供します。OpenSSL と組み込みのどちらか選択できます。組み込みを選択するとサポートするハッシュ関数、暗号が少くなりますが、標準的に必要なハッシュ関数や暗号は組み込みだけで利用できます。

■■ F.34. sepgsql (9.1以上)

http://www.postgresql.org/docs/9.4/static/sepgsql.html

SELinux 機能を利用して強制アクセス制御を行います。しかし、DDL / DCL / 行アクセスなどの強制アクセス制御が出来ないので完全ではありません。

◆ 全文検索

■■ F.10. dict_int (8.3以上)

http://www.postgresql.jp/document/9.3/html/dict-int.html

全文検索で効率良く整数をインデックスする辞書テンプレートです。実際に利用する場合は以下のように利用します。

ALTER TEXT SEARCH CONFIGURATION english
    ALTER MAPPING FOR int, uint WITH intdict;

■■ F.11. dict_xsyn (8.3以上)

http://www.postgresql.jp/document/9.3/html/dict-xsyn.html

拡張類義語辞書です。単語を類義語の集まりに置き換え、検索できるようにします。

■■ F.31. pg_trgm (8.3以上)

トリグラムを利用した全文検索に利用します。日本語の場合、少なくとも 2 グラム以下でないと"東京"、"京都"などの名詞が検索できません。主に欧米圏の言語に適した方式です。

■■ F.42. tsearch2 (8.3以上)

単語ベースの全文検索を行います。この機能は PostgreSQL 本体に組み込まれており、8.3 未満のシステムとの互換性のために提供されています。

■■ F.43. unaccent (9.0以上)

"A" からアクセント記号を取り除き "A" などに変換します。アクセント記号を持つ欧米系の言語で利用します。

◆ 機能拡張

■■ F.9. dblink (8.3以上)

http://www.postgresql.org/docs/9.4/static/dblink.html

他の PostgreSQL データベースのテーブルへアクセスします。FDW を利用した実装の方が柔軟な機能を実現できます。

■■ F.13. earthdistance (8.3以上)

http://www.postgresql.org/docs/9.4/static/dblink.html

地球上の距離を計算します。地球が完全な球体であると仮定しているので、より高い精度が必要な場合はPostGISを利用します。

■■ F.15. fuzzystrmatch (8.3以上)

http://www.postgresql.org/docs/9.4/static/fuzzystrmatch.html

英語などで曖昧検索を行います。マルチバイト文字エンコーディングでは正しく動作しません。soundex, levenshtein, metaphone, duble metaphone をサポートしています。

■■ F.18. intarray (8.3以上)

http://www.postgresql.org/docs/9.4/static/intarray.html

整数配列の関数、オペレータを追加します。

■■ F.17. intagg (8.3以上)

http://www.postgresql.org/docs/9.4/static/intagg.html

この機能は PostgreSQL に組み込まれています。下位互換性の為の整数の集約関数、列挙関数を提供します。

■■ F.37. tablefunc (8.3以上)

http://www.postgresql.org/docs/9.4/static/tablefunc.html

ピボットテーブルを作成するモジュールです。

■■ F.45. xml2 (8.3以上)

http://www.postgresql.org/docs/9.4/static/xml2.html

XML 文書の整合性チェック関数、XPath 関数、XSLT 関数を提供します。

◆ 外部データラッパー

■■ F.14. file_fdw (9.1以上)

http://www.postgresql.org/docs/9.4/static/file-fdw.html

"COPY FROM" で作成されたテキストを読み込み専用として取り扱う FDW (外部データラッパー) です。

■■ F.32. postgres_fdw (9.3以上)

http://www.postgresql.org/docs/9.4/static/postgres-fdw.html

他の PostgreSQL データベースのデータを利用できるようにします。dblink と機能が重複していますが、FDW を利用したこちらのモジュールの方が標準的かつより柔軟で高速なデータアクセスが可能です。

◆ 管理

■■ F.1. adminpack (8.3以上)

http://www.postgresql.org/docs/9.4/static/adminpack.html

pgAdmin などの管理ツールで利用する関数を提供します。

■■ F.3. auto_explain (8.4以上)

http://www.postgresql.org/docs/9.4/static/auto-explain.html

遅いクエリを検出した場合に自動的に EXPLAIN を実行し、ログに記録します。

■■ F.24. pg_buffercache (8.3以上)

http://www.postgresql.org/docs/9.4/static/pgbuffercache.html

PostgreSQL の共有バッファの状態を取得する関数を提供します。

■■ F.26. pg_freespacemap (8.3以上)

http://www.postgresql.org/docs/9.4/static/pgfreespacemap.html

FSM (Free Space Map) の状態を取得する関数を提供します。

■■ F.27. pg_prewarm (9.4以上)

http://www.postgresql.org/docs/9.4/static/pgprewarm.html

テーブルデータを読み込んで、バッファをウォームアップする関数を提供します。

■■ F.28. pgrowlocks (8.3以上)

http://www.postgresql.org/docs/9.4/static/pgrowlocks.html

特定テーブルの行ロック状態を取得する関数を提供します。

■■ F.29. pg_stat_statements (8.4以上)

http://www.postgresql.org/docs/9.4/static/pgstatstatements.html

サーバーで実行された SQL 文の統計情報を取得する関数を提供します。

■■ F.30. pgstattuple (8.3以上)

http://www.postgresql.org/docs/9.4/static/pgstattuple.html

タプルレベルの統計情報を取得する関数を提供します。

■■ F.36. sslinfo (8.3以上)

http://www.postgresql.org/docs/9.4/static/sslinfo.html

SSL の状態を取得する関数を提供します。

■■ F.38. tcn (9.2以上)

http://www.postgresql.org/docs/9.4/static/tcn.html

テーブル更新を監視するトリガーを設定します。

◆ PostgreSQL 開発

■■ F.4. btree_gin (8.4以上)

http://www.postgresql.org/docs/9.4/static/btree-gin.html

GIN に Btree と同じ演算子を提供します。GIN 開発時のデバッグに利用します。

■■ F.5. btree_gist (8.3以上)

http://www.postgresql.org/docs/9.4/static/btree-gist.html

GiST に Btree と同じ演算子を提供します。btree_gin と同様にデバッグ用に利用しますが、こちらは "<->" (距離オペレータ) を提供しておりある程度の実用性もあります。

■■ F.22. pageinspect (8.3以上)

http://www.postgresql.org/docs/9.4/static/pageinspect.html

PostgreSQL デバッグ用にデータベースページの詳細な情報を取得します。

■■ F.12. dummy_seclabel (9.1以上)

http://www.postgresql.org/docs/9.4/static/dummy-seclabel.html

SELinux 機能テスト用のモジュール

■■ F.35. spi (8.3以上)

http://www.postgresql.org/docs/9.4/static/contrib-spi.html

SPI (サーバープログラミングインターフェース) を利用したサンプル実装となる関数を提供します。

■■ F.39. test_decoding (9.4以上)

http://www.postgresql.org/docs/9.4/static/test-decoding.html

論理レプリケーションのデコーダー開発時のテストに利用します。

■■ F.40. test_parser (8.3以上)

全文検索のカスタムパーサーのテストのサンプルです。

■■ F.41. test_shm_mq (9.4以上)

http://www.postgresql.org/docs/9.4/static/test-shm-mq.html

共有メモリ、共有メモリメッセージキューの使い方のサンプルです。

◆ まとめ

データベースサーバーなど、比較的安全なネットワークに配置されるサーバーは安易なパスワードが設定されがちです。passwordcheck は簡単なパスワードが設定されることを防止するには、とても便利だと思います。ISBN や UUID をデータ型と取り扱えるので、これらのデータを扱う場合、アプリケーションで整合性をチェックするとともにデータベース側でも追加のデータ型を利用して整合性を保つと良いでしょう。ltree型とその演算子 / 関数は木構造を持つ分類には非常に便利です。PostgreSQL は GIN でタグ検索を効率的に行えますが、RDBMS が苦手な木構造の PostgreSQL なら容易かつ効率的に管理できます。

Contrib 以外にもhttp://pgfoundry.org/で多数の PostgreSQL 拡張が公開されています。データベースにこんな機能があれば?と思った場合、ここを探してみると良いでしょう。

0 件のコメント:

コメントを投稿