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