ご存知かもしれませんが、PostgreSQL拡張機能を使用してPostgreSQL機能を拡張できます。さまざまな拡張機能を使用して、PostgreSQLをエンタープライズバージョンのようにし、特定のニーズに対応できます。このブログでは、PostgreSQLで最も人気のあるオープンソース拡張機能のいくつかと、PostgreSQLを使用してその機能を拡張する方法について説明します。
PostgreSQLは最も先進的なオープンソースデータベースです。 PostgreSQLコミュニティは毎年、いくつかの新機能を備えた新しいバージョンをリリースしていますが、特定のユースケースに使用できる拡張機能を使用して開発された多くの機能があります。
これらの拡張機能のいくつかは、エンタープライズグレードのPostgreSQL環境を構築するために非常に強力で人気があります。
Pg_stat_statements
pg_stat_statementsモジュールは、PostgreSQLサーバーによって実行されたすべてのSQLステートメントの実行統計を追跡する手段を提供します。 pg_stat_statementsモジュールがロードされると、サーバーのすべてのデータベースにわたる統計を追跡します。 pg_stat_statementsモジュールによって収集された統計は、pg_stat_statementsという名前のビューを介して利用可能になります。 pg_stat_statements関数と構成パラメーターの詳細については、こちらを確認してください。
PostGIS
PostGISはPostgreSQLデータベースシステムの拡張機能であり、GIS(地理情報システム)オブジェクトをデータベースに保存できます。これには、GiSTベースのRツリー空間インデックスのサポート、およびGISオブジェクトの分析と処理のための機能が含まれています。
PostGISはPostgreSQLの空間オブジェクトと地理オブジェクトに使用されます。 PostGISはタイプ(ジオメトリ、地理、ラスターなど)をPostgreSQLデータベースに追加します。 PostGISは、これらの空間タイプに適用される関数、演算子、およびインデックスの拡張機能も追加します。インストール方法はこちらで確認できます。
Postgres_fdw
postgres_fdwモジュールは、外部データラッパーpostgres_fdwを提供します。これは、外部PostgreSQLデータベースサーバーに格納されているデータにアクセスするために使用できます。 PostgreSQLデータベースが2つある場合、postgres_fdwは1つのデータベースから他のデータベースのテーブルを参照します。 FOREIGN TABLEを定義すると、ローカルデータベースのようにSELECT、INSERT、UPDATE、DELETEを実行できます。
postgres_fdwモジュールによって提供される機能は、古いdblinkモジュールの機能と実質的に重複しています。ただし、postgres_fdwモジュールは、リモートテーブルにアクセスするためのより透過的で標準に準拠した構文を提供し、多くの場合、パフォーマンスを向上させることができます。
外部テーブルの主な使用例は、データを複製または複製せずにシステムで利用できるようにすることです。他のシャードのデータはFDWを介したクエリに使用できるため、FDWを使用したシャーディングの簡単な実装もあります。
Oracleでは、DBLinksを使用してリモートデータベーステーブルからデータを取得できますが、DBLinksとFDWの主な違いは、FDWが外部テーブルに関するメタデータまたはテーブル定義をローカルで維持できることです。
MySQL_fdw
Mysql_fdwは、MySQL用のForeign Data Wrapper(FDW)を実装するPostgreSQL拡張機能です。 Mysql_fdwモジュールは、PostgreSQLサーバーをMySQLサーバーのクライアントとして使用することを容易にします。つまり、MySQLデータベースからクライアントとしてデータをフェッチできます。現在、EnterpriseDBはこのモジュールをgithubで管理しています。
以前のバージョンのmysql_fdwは読み取り専用でのみサポートされていましたが、最新バージョンは書き込み機能を提供します。ユーザーは、mysql_fdwを使用して、外部テーブルの挿入、更新、および削除ステートメントを発行できるようになりました。 PostgreSQLの型キャストメカニズムを使用して、MySQLとPostgreSQLのデータ型の間で反対の型キャストを提供します。
Hstore
hstoreモジュールは、PostgreSQLでキーと値のペアを単一の値に格納するためのhstoreデータ型を実装します。 hstoreデータ型は、半構造化データや、ほとんどクエリされない多くの属性を持つ行など、多くのユースケースで非常に役立ちます。キーと値は単なるテキスト文字列であることに注意してください。
hstoreデータ型を使用する前に、contribモジュールをPostgreSQLインスタンスにロードするhstore拡張機能を作成する必要があります。
Pgaudit
pgAuditはPostgreSQL監査拡張機能であり、標準のPostgreSQLログ機能を介して詳細なセッションおよび/またはオブジェクト監査ログを提供します。
pgAuditモジュールの主な目標は、PostgreSQLユーザーに、政府、金融、またはISOの認証に準拠するために必要となることが多い監査ログを作成する機能を提供することです。
一般に、監査は、通常は独立した機関による、個人または組織のアカウントの公式検査です。 pgAuditモジュールによって収集された情報は、適切に監査証跡または監査ログと呼ばれます。
pgAuditモジュールは、PostgreSQL9.5以降のバージョンをサポートするために開発されました。
pgAuditモジュールからのセッション監査ログは、バックエンドでユーザーによって実行されたすべてのステートメントの詳細なログを提供します。詳細、構成、およびPostgreSQLでのインストールと使用方法についてはこちらをご覧ください。
オラフス
Orafceは、Oracle互換の関数、データ型、およびパッケージを実装するモジュールです。これはBSDライセンスのオープンソースツールなので、誰でもこのツールを使用できます。このモジュールは、OracleからPostgreSQLへの移行タスクで非常に役立ちます。PostgreSQLに実装された多くのOracle関数があります。
アプリケーションは通常、これらの関数を複数回使用します。このツールを使用すると、SQLの変更コストを削減できます。 OracleからPostgreSQLブログに移行する方法を確認できます。
すべての機能とパッケージが正しく実装されており、十分にテストされています。
いくつかの機能は次のとおりです。
- Dbms_output
- Dbms_random
- utl_file –ファイルシステム関連の関数
- Dbms_pipeおよびdbms_alert
- PLVdate、PLVstr、PLVchr
- Oracle互換のDATEデータ型と、ADD_MONTHS、LAST_DAY、NEXT_DAYなどの関数。
- NVL関数
- SUBSTRおよびSUBSTRB関数
- VARCHAR2およびNVARCHAR2のサポート
- TO_DATE()
Pg_bulkload
Pg_bulkloadモジュールは、PostgreSQLユーザーに高速データロード機能を提供します。 pg_bulkloadモジュールは、大量のデータをデータベースにロードするように設計されています。 PostgreSQL共有バッファをバイパスしてデータをテーブルにロードできます。 pg_bulkloadモジュールには、入力データの検証やフィルター関数を使用したデータ変換など、いくつかのETL機能もあります。
pg_bulkloadモジュールの当初の目標は、PostgreSQLのCOPYコマンドのより高速な代替手段でした。
Pg_bulkloadモジュールは、NTTOSSCenterによって開発および保守されています。
重要な注意:PostgreSQLのストリーミングレプリケーション環境では、pg_bulkloadモジュールが正しく機能しません。詳細については、こちらをご覧ください。
Pgstattuple
pgstattupleモジュールは、PostgresQLでタプルレベルの統計を取得するためのさまざまな関数を提供します。 pgstattupleモジュールの関数は、リレーションの物理的な長さ、「デッド」タプルのパーセンテージ、およびその他の情報を返します。これは、ユーザーが真空が必要かどうかを判断するのに役立つ場合があります。関数の引数は、ターゲットリレーションの名前(オプションでスキーマ修飾)またはOIDです。
Pg_trgm
pg_trgmは、PostgreSQLで単純なあいまい文字列マッチングを提供するPostgreSQL拡張機能です。その運用上および概念上のオーバーヘッドは、PostgreSQL全文検索または個別の検索エンジンよりもはるかに低くなっています。
トリグラムまたはトリグラフは、文字列から取得された3つの連続した文字のグループです。 2つの文字列が共有するトライグラムの数を数えることで、2つの文字列の類似性を測定できます。トリグラムのこの単純なアイデアは、多くの自然言語の単語の類似性を測定するのに非常に効果的であることがわかりました。
一般に、pg_trgmモジュールは次の場合に役立ちます。
- PostgreSQLでは大文字と小文字を区別しない文字列照合が必要です。
- PostgreSQLでLIKE、ILIKE、〜または〜*を高速化する必要があります。
- 左に固定されていないパターンを検索したい(例:%john%)。このようなパターンは、PostgreSQLのBツリーインデックスではサポートされていません。
上記のモジュール/拡張機能のリストは、PostgreSQLの機能を拡張するのに非常に役立ちます。ブログに含まれていない拡張機能がいくつかありますが、PostgreSQLの機能を拡張すると非常に便利です。これらは次のとおりです。
- 言語拡張:PL / Python、PL / Perl、PL / R、PL / v8、PL/shなど
- Cstore_fdw
- Mongo_fdw
- HypoPG
- Tds_fdw
- Plprofiler
結論
PostgreSQLコミュニティでサポートされている拡張機能といくつかのサードパーティの拡張機能には多くの拡張機能があり、すべて特定のユースケースで使用されます。これらのモジュールを使用して、PostgreSQLの機能を拡張できます。