PostgreSQL公式拡張モジュール
ServBayは多彩な開発者向けツールを統合した強力なローカルWeb開発環境です。その中核の一つであるPostgreSQLは、標準機能だけでなく、豊富な公式拡張エコシステムによって更なる強みを発揮します。ServBayにはPostgreSQLの多くの公式拡張モジュールがあらかじめインストールされており、開発者はこれらをローカル環境で手軽に有効化・利用できます。これにより、データベース機能が大幅に拡張され、さまざまな高度なアプリケーション要件に対応可能です。
本ガイドでは、よく使われるPostgreSQL公式拡張モジュールの特徴と、ServBayでのインストール・利用方法について解説します。
主な拡張モジュールの概要
PostgreSQL公式にはパフォーマンス監視からデータ型、全文検索など多岐にわたる拡張モジュールが提供されています。日々の開発や運用で役立つ主要モジュールを以下に紹介します。
1. pg_stat_statements
- 機能:サーバが実行したすべてのSQL文の統計情報(呼び出し回数、総実行時間、処理行数など)を収集・記録します。
- 用途:データベース管理者や開発者がクエリ性能を分析し、遅いクエリやボトルネックを発見・最適化するのに役立ちます。
- インストールコマンド:sql注意:インストール後、
CREATE EXTENSION pg_stat_statements;
1postgresql.conf
のshared_preload_libraries = 'pg_stat_statements'
設定とPostgreSQLサービスの再起動が必要です。ServBayでは設定変更も容易です。
2. pg_trgm
- 機能:3文字組(トライグラム)ベースのテキスト類似度判定関数やインデックスを提供します。
- 用途:あいまい検索や類似文字列検索・全文検索など、誤字や表記揺れのあるデータに効果的です。
- インストールコマンド:sql
CREATE EXTENSION pg_trgm;
1
3. hstore
- 機能:1つのPostgreSQL値にキーと値のペアの集合を格納できるデータ型を提供します。
- 用途:柔軟な属性や半構造化データ(設定値やメタ情報、ユーザー設定など)の保存に最適で、厳格なテーブル設計が不要です。
- インストールコマンド:sql
CREATE EXTENSION hstore;
1
4. citext
- 機能:大文字・小文字を区別しない(ケースインセンシティブ)テキスト型を提供します。
- 用途:ユーザー名やメールアドレス、タグなど、大文字小文字を区別しない比較が必要な場合、
LOWER()
関数の多用を避け、コードを簡素化できます。 - インストールコマンド:sql
CREATE EXTENSION citext;
1
5. uuid-ossp
- 機能:UUID(汎用一意識別子)を複数バージョン(1, 3, 4, 5)生成できる関数群を提供します。
- 用途:主キーやセッションID、分散システム内のユニークID生成に最適です。
- インストールコマンド:sql注意:拡張名にハイフンが含まれているため、
CREATE EXTENSION "uuid-ossp";
1CREATE EXTENSION
実行時はダブルクォーテーションで囲みます。
6. intarray
- 機能:整数配列向けの演算子や関数など、追加の操作機能を提供します。
- 用途:DBレイヤーで整数配列の集合演算(和・共通・包含判定など)、ソート等の複雑な操作を直接実行したい時に有効です。
- インストールコマンド:sql
CREATE EXTENSION intarray;
1
7. btree_gin
- 機能:整数や文字列、日付などB-treeデータ型に対するGIN(汎用反転インデックス)操作サポートを提供します。
- 用途:配列や
hstore
、tsvector
などの複合型に含まれるB-tree型要素をGIN形式で効率よくインデックス化し、検索速度を向上させます。 - インストールコマンド:sql
CREATE EXTENSION btree_gin;
1
8. btree_gist
- 機能:B-treeデータ型に対してGiST(汎用検索ツリー)インデックス操作を提供します。
- 用途:範囲・包含クエリ、多カラムインデックス作成など、多様なクエリタイプをサポートする際に役立ちます。
- インストールコマンド:sql
CREATE EXTENSION btree_gist;
1
9. cube
- 機能:多次元立方体・座標(点)を表現するデータ型および対応する演算子・関数を提供します。
- 用途:シンプルな地理空間データやデータウェアハウス内の多次元分析、科学技術計算など、多次元データの扱いに適します。
- インストールコマンド:sql
CREATE EXTENSION cube;
1
10. fuzzystrmatch
- 機能:文字列間の類似度や距離(レーベンシュタイン距離、Soundex、Metaphoneなど)を判定する各種関数を提供します。
- 用途:あいまいマッチング、スペルチェック、データクレンジングや重複排除などで活躍します。
- インストールコマンド:sql
CREATE EXTENSION fuzzystrmatch;
1
11. plpgsql
- 機能:PostgreSQLのプロシージャ言語で、ストアドプロシージャやトリガー関数、無名ブロックを記述できます。
- 用途:DBサーバー側で複雑なビジネスロジックや自動化処理、データ処理を実装します。
plpgsql
は標準インストールされている場合が多いですが、CREATE EXTENSION
で明示的に確認・再作成も可能です。 - インストールコマンド:sql
CREATE EXTENSION plpgsql;
1
12. tablefunc
- 機能:表全体の操作や変換を実現する関数群(特に
crosstab
関数が有名)を提供します。 - 用途:クロス集計(ピボットテーブル)を行い、特定カラムのユニーク値を列化したい場合やレポート作成・データ分析に重宝します。
- インストールコマンド:sql
CREATE EXTENSION tablefunc;
1
13. dblink
- 機能:1つのPostgreSQLデータベースから別のPostgreSQLデータベースへ接続・クエリ実行を可能にします。
- 用途:アプリ層で複雑なクロスDB接続処理を行わず、DB間の簡易なデータ参照や移行を実現できます。
- インストールコマンド:sql
CREATE EXTENSION dblink;
1
14. postgres_fdw
- 機能:外部データラッパー(Foreign Data Wrapper)として、外部PostgreSQLのテーブルへローカルテーブルのようにアクセスできます。
- 用途:
dblink
よりパワフルかつ柔軟で、複数DB間のデータ統合や連携クエリ(フェデレーション)を効率的に行えます。 - インストールコマンド:sql
CREATE EXTENSION postgres_fdw;
1
15. pgcrypto
- 機能:暗号・復号、ハッシュ化、公開鍵暗号化などさまざまなセキュリティ関連関数を提供します。
- 用途:DBレベルでのデータ暗号化、パスワードハッシュ保管、デジタル署名の生成・検証など、セキュリティ強化に役立ちます。
- インストールコマンド:sql
CREATE EXTENSION pgcrypto;
1
上記はServBayで利用可能なPostgreSQL公式拡張モジュールの一部です。ServBayはコミュニティが提供するほぼ全ての主要拡張を網羅し、開発者の多様なニーズをサポートしています。
ServBayでPostgreSQL拡張モジュールをインストール・利用する方法
ServBay環境でのPostgreSQL拡張モジュールの導入・利用はとてもシンプルです。拡張モジュールは各データベース単位でインストールされるため、利用したい各DBごとに個別に有効化する必要があります。
前提条件:
- ServBayが起動中で、PostgreSQLデータベースサービスも起動していること。
手順:
対象のPostgreSQLデータベースに接続する
ターミナルアプリ(macOSならTerminalやiTerm2など)を開き、psql
コマンドラインツールで拡張を導入したいDBへ接続します。デフォルトではServBayのPostgreSQLユーザー名とDB名は共にpostgres
です。bashpsql -U your_username -d your_database
1例:デフォルトDB
postgres
に接続する場合bashpsql -U postgres -d postgres
1接続時にパスワードを求められた場合は、ServBay上でPostgreSQL用に設定したroot/postgresユーザーのパスワードを入力してください。
拡張モジュールのインストール
接続に成功すると、psql
コマンドライン画面に移ります。ここでCREATE EXTENSION
コマンドを実行して必要なモジュールをインストールします。module_name
を希望の拡張名に置き換えます。sqlCREATE EXTENSION module_name;
1例:
pg_trgm
拡張のインストールsqlCREATE EXTENSION pg_trgm;
1インストールの確認
インストール完了後は、\dx
コマンドで現DBにインストール済みの拡張一覧を表示し、導入状況を確認できます。sql\dx
1
例:pg_trgm
拡張を有効化する手順
以下は、psql
上でpostgres
データベースに接続し、pg_trgm
拡張を有効化する一連の例です。
sql
# ターミナルでDBへ接続
psql -U postgres -d postgres
# 接続成功時のpsqlプロンプト
psql (16.3 (ServBay))
Type "help" for help.
postgres=# -- インストール済み拡張一覧の表示(初期状態ではplpgsql・pgcryptoなどのみ)
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+------------------------------
pgcrypto | 1.3 | public | cryptographic functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
postgres=# -- pg_trgm拡張のインストール
postgres=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
postgres=# -- 再度拡張一覧を確認し、pg_trgm導入を確認
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+-------------------------------------------------------------------
pg_trgm | 1.6 | public | text similarity measurement and index searching based on trigrams
pgcrypto | 1.3 | public | cryptographic functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(3 rows)
postgres=# -- インストール成功。このDBでpg_trgmの各種関数や演算子が利用可能になりました
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
ServBayで利用可能なPostgreSQL拡張一覧を調べる
拡張を有効化する前に、ServBayに付属するPostgreSQLバージョンで利用可能な拡張の一覧を確認することができます。これにより、新たな有用機能を見つけるのにも役立ちます。
下記のSQLを、任意のPostgreSQLデータベースに接続した状態で実行してください。
sql
SELECT * FROM pg_available_extensions ORDER BY name;
1
このコマンドにより、ServBay内で対応するPostgreSQL上の全拡張モジュール名・デフォルトバージョン・インストール状況・概要説明がテーブル表示されます。
実行例(リストは長いため抜粋し、実際の内容やバージョンはServBayやPostgreSQLのバージョンにより異なります):
sql
name | default_version | installed_version | comment
------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------------
address_standardizer | 3.4.2 | | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
address_standardizer_data_us | 3.4.2 | | Address Standardizer US dataset example
adminpack | 2.1 | | administrative functions for PostgreSQL
amcheck | 1.3 | | functions for verifying relation integrity
autoinc | 1.0 | | functions for autoincrementing fields
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.3 | | support for indexing common datatypes in GIN
btree_gist | 1.7 | | support for indexing common datatypes in GiST
citext | 1.6 | | data type for case-insensitive character strings
cube | 1.5 | | data type for multidimensional cubes
dblink | 1.2 | | connect to other PostgreSQL databases from within a database
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
file_fdw | 1.0 | | foreign-data wrapper for flat file access
fuzzystrmatch | 1.2 | | determine similarities and distance between strings
hstore | 1.8 | | data type for storing sets of (key, value) pairs
insert_username | 1.0 | | functions for tracking who changed a table
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.5 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.2 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.2 | | data type for hierarchical tree-like structures
moddatetime | 1.0 | | functions for tracking last modification time
old_snapshot | 1.0 | | utilities in support of old_snapshot_threshold
pageinspect | 1.12 | | inspect the contents of database pages at a low level
pg_buffercache | 1.4 | | examine the shared buffer cache
pg_freespacemap | 1.2 | | examine the free space map (FSM)
pg_jieba | 1.1.1 | | a parser for full-text search of Chinese
pg_prewarm | 1.2 | | prewarm relation data
pg_stat_statements | 1.10 | | track planning and execution statistics of all SQL statements executed
pg_surgery | 1.0 | | extension to perform surgery on a damaged relation
pg_trgm | 1.6 | 1.6 | text similarity measurement and index searching based on trigrams
pg_visibility | 1.2 | | examine the visibility map (VM) and page-level visibility info
pg_walinspect | 1.1 | | functions to inspect contents of PostgreSQL Write-Ahead Log
pgcrypto | 1.3 | 1.3 | cryptographic functions
pgrouting | 3.6.2 | | pgRouting Extension
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.5 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
postgis | 3.4.2 | | PostGIS geometry and geography spatial types and functions
postgis_sfcgal | 3.4.2 | | PostGIS SFCGAL functions
postgis_tiger_geocoder | 3.4.2 | | PostGIS tiger geocoder and reverse geocoder
postgres_fdw | 1.1 | | foreign-data wrapper for remote PostgreSQL servers
refint | 1.0 | | functions for implementing referential integrity (obsolete)
seg | 1.4 | | data type for representing line segments or floating-point intervals
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tcn | 1.0 | | Triggered change notifications
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
vector | 0.7.0 | | vector data type and ivfflat and hnsw access methods
xml2 | 1.1 | | XPath querying and XSLT
zhparser | 2.2 | | a parser for full-text search of Chinese
(55 rows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
上記は例です。実際のリストやバージョン番号は、ServBayやPostgreSQLの更新により異なる場合があります。
まとめ
ServBayは豊富なPostgreSQL公式拡張を標準搭載し、ローカル開発環境でこれら強力な機能を手軽に利用できるようにしています。面倒なビルドや追加インストールをせず、シンプルなSQLコマンド実行のみで必要な拡張機能を有効化でき、開発者はアプリケーション開発そのものに専念できます。これら拡張によって、パフォーマンス分析や全文検索、データセキュリティなど、プロジェクトに高度なDB機能を簡単に組み込むことが可能です。