PostgreSQL の拡張機能とモジュールは、ユーザーがデータベース システムの機能を拡張できる強力なツールです。 単純な SQL オブジェクトから複雑なバイナリ ライブラリまで、PostgreSQL のコア ディストリビューションでは使用できない追加の機能が提供されます。
Extensions
拡張機能を定義するには、拡張機能によって配布されるオブジェクトを作成するための SQL コマンドを含むスクリプト ファイル と、拡張機能自体のいくつかの基本的なプロパティを指定する コントロール ファイル が少なくとも 1 つ必要です。
拡張機能が作成される、インストールされる、またはデータベースに読み込まれると、エンジンの機能を拡張することを目的とした一連のバンドル オブジェクトがデプロイされます。 これらのオブジェクトは、関数、演算子、ロール、データ型、アクセス メソッド、その他のデータベース オブジェクト型という形をとることができます。
拡張機能がデータベースから削除、アンインストール、またはアンロードされると、拡張機能によって作成されたすべてのオブジェクトが削除されます。 この例外は、拡張機能によって定義されたオブジェクトのいずれかに依存関係を持つ他のオブジェクトがデータベースに存在する場合です。
拡張機能によって配布されるオブジェクトによって提供される機能の実装は、SQL または PL/pgSQL で記述できます。 しかし、この機能を実装するソース コード (通常は C または Rust で記述) をコンパイルした結果として、別の共有ライブラリ (バイナリ) ファイルに実装することもできます。
PostgreSQL では、拡張機能は、CREATE EXTENSION、ALTER EXTENSION、DROP EXTENSION、COMMENT ON EXTENSION コマンドによって管理されます。
-
CREATE EXTENSIONは、コマンドが実行されるデータベースに拡張機能を作成、インストール、または読み込みます。 -
ALTER EXTENSIONは、拡張機能を新しいバージョンに更新します。 -
DROP EXTENSIONは、コマンドが実行されるデータベースから拡張機能を削除、アンインストール、またはアンロードします。 -
COMMENT ON EXTENSIONは、拡張機能に関するコメントをデータベース オブジェクトとして格納します。
サーバーを起動すると、すべてのバックエンド プロセスがアクセスできるメモリ領域が定義され、ワークロードを協調的に実行できます。 PostgreSQL の専門用語では、そのメモリ領域は共有メモリと呼ばれます。
共有ライブラリを使用して機能を実装する拡張機能の中には、これらのライブラリに組み込まれているコードからその共有メモリ領域にアクセスするための nned 拡張機能があります。 これらの拡張機能にはもう 1 つの要件があります。これは、サーバーが起動するとすぐに、メイン エンジン プロセスによって共有ライブラリ ファイルを読み込む必要があるということです。 これらのライブラリでは、ライブラリを読み込む手順に従う必要があります。
モジュール
拡張機能とは見なされませんが、バンドルされた SQL オブジェクトをデータベースにデプロイするための コントロール ファイル と スクリプト ファイル がないため、PostgreSQL の別の形式の拡張性は、スタンドアロンの共有バイナリ ライブラリ ファイルに機能を実装する上で構成されます。
これらのファイルは、サーバーの起動時にメモリに読み込むこともできます。また、通常は PostgreSQL の自然な実行パスを迂回してエンジンの既定の機能を変更するコードを実装することもできます。 このような動作の変更は、通常、エンジンのいくつかの制限された機能を増幅することを目的としています。
Azure Database for PostgreSQL では、次のモジュールがサポートされています。
- auto_explain
- pg_failover_slots
- pg_partman_bgw
- wal2json