sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLCreateExtensionを使用した新しいモジュールの作成

    はじめに

    ご存知かもしれませんが、PostgreSQLは拡張性とカスタマイズ性を考慮して設計されています。つまり、拡張機能を使用してデータベースの機能を拡張できます。 PostgreSQL拡張機能を使用すると、データベースにロードまたはデータベースから削除できる単一のパッケージに複数のSQLオブジェクトをバンドルできます。データベースにロードすると、拡張機能は組み込み機能として機能できます。

    PostgreSQLデータベースには多くの機能があり、さまざまなデータ型、関数、演算子などを提供します。ただし、一部のユースケースでは不十分な場合があります。拡張機能を使用してPostgreSQLの機能を簡単に拡張できます。これは、データベース開発者と管理者にとって非常に便利な機能です。

    このブログでは、以下の2つのことを取り上げることができます。

    1. PostgreSQLコミュニティでサポートされている拡張機能の使用方法
    2. PostgreSQLで拡張機能を作成して使用する方法

    PostgreSQLコミュニティでサポートされている拡張機能の使用方法

    PostgreSQLには多くのcontribモジュール/拡張機能があります。これらのモジュールはPostgreSQLコミュニティによって維持されています。拡張機能を作成することで、これらのモジュールとPostgreSQLの機能を使用できます。

    PostgreSQLでhstore拡張機能の機能を使用する方法を見てみましょう。

    Hstore拡張機能

    hstoreモジュールは、キーと値のペアを単一の値に格納するhstoreデータ型を実装します。半構造化データや、ほとんどクエリされない多くの属性を持つ行な​​ど、多くの場合、hstoreデータ型を使用できます。キーと値は単なるテキスト文字列であることに注意してください。この機能を使用するには、PostgreSQLで拡張機能を作成する必要があります。

    hstoreデータ型の使用方法を見てみましょう。

    CREATE TABLE books (
     book_code serial primary key,
     book_title VARCHAR (20),
     attr hstore
    );

    hstoreデータ型を作成する前に、contribモジュールをPostgreSQLにロードするhstore拡張機能を有効にする必要があります。

    CREATE EXTENSION hstore;

    データベースからデータを取得するためのさまざまなhstore関数があります。ここで関数と例を確認できます。

    PostgreSQLで提供されている追加のモジュールを確認してください。

    拡張機能を作成する方法

    拡張性は、PostgreSQLの最も強力な機能の1つです。 contribモジュールを使用して特定のユースケースに新しい機能を追加し、CREATEEXTENSIONを使用してインストールできます。

    このセクションでは、簡単なcontribモジュールを作成する方法と、PostgreSQLでその機能を使用する方法を学習します。

    拡張子ファイル

    データベースでCREATEEXTENSIONコマンドを実行できるようにするには、拡張機能に少なくとも2つのファイルが必要です。

    1. 制御ファイル
      ファイル形式はextension_name.controlである必要があります。これは、PostgreSQLの拡張に関する基本事項を示し、インストールのSHAREDIR/拡張ディレクトリに配置する必要があります。
    2. SQLスクリプトファイル
      形式拡張子--version.sqlのファイルには、追加する関数が含まれています。

    拡張機能の制御ファイルのファイル形式は、postgresql.confファイルと同じです。つまり、parameter_name =値の割り当てのリストで、1行に1つずつです。

    以下のSQLのみの拡張機能の完全な例を確認し、PostgreSQLでOracle互換のNVL関数を作成してください。多くの場合がありますが、ここではたとえば1つの場合しか考えられません。

    SQLスクリプトファイルnvlfunc--1.0.sqlは次のようになります...

    Nvlfunc--1.0.sqlファイル:

    --complain if script is sourced in psql, rather than via CREATE EXTENSION
    \echo Use "CREATE EXTENSION nvlfunc" to load this file. \quit
    
    CREATE OR REPLACE FUNCTION public.NVL(SMALLINT,SMALLINT)
    RETURNS SMALLINT AS $$
    SELECT COALESCE($1,$2);
    $$ LANGUAGE SQL IMMUTABLE;

    制御ファイルnvlfuncは次のようになります...

    Nvlfunc.conntrolファイル:

    # nvlfunc extension
    comment = 'Oracle compatible nvl function'
    default_version = '1.0'
    module_pathname = '$libdir/nvlfunc'
    relocatable = false

    これらのファイルを正しいディレクトリにインストールするためにmakefileはほとんど必要ありませんが、これを含むMakefileを使用できます。

    Makefile:

    EXTENSION = nvlfunc
    DATA = nvlfunc--1.0.sql
    
    PG_CONFIG = pg_config
    PGXS := $(shell $(PG_CONFIG) --pgxs)
    include $(PGXS)

    「C」言語を使用して関数を実装した場合は、ファイルをmakefileに追加する必要があります。

    インストール

    コマンドmakeinstallは、pg_configによって報告された正しいディレクトリに制御ファイルとSQLスクリプトファイルをインストールします。

    ファイルがインストールされたら、CREATE EXTENSIONコマンドを使用して、オブジェクトをPostgreSQLの特定のデータベースにロードします。

    次の手順を確認してnvlfunc拡張機能をインストールしてください。また、このファイルを拡張機能ディレクトリに追加することもできます。

    INSTALL.nvlfuncファイル:

    This module is a PostgreSQL extension which provides the Oracle compatible nvl function feature.
    Use below command in source directory of nvlfunc to install the module.
    make install
    Then use the below command to create extension nvlfunc in database.
    CREATE EXTENSION nvlfunc;
    Use the below command to remove the nvlfunc extension from database.
    DROP EXTENSION nvlfunc;
    Use below command in source directory of nvlfunc to uninstall the module.
    make uninstall
    Note:
    This extension module requires PostgreSQL 9.1 or later because CREATE EXTENSION
    feature is available in PostgreSQL 9.1 and later version.

    PostgreSQL拡張機能を使用する前に、データベースにPostgreSQL拡張機能をインストールする必要があります。特定の拡張機能をインストールするには、psqlからCREATE EXTENSIONコマンドを実行して、パッケージ化されたオブジェクトをデータベースにロードします。

    今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードする

    テスト

    拡張機能を作成したら、その拡張機能のテストケースを作成して、このモジュールを別のPostgreSQLバージョンにインストールするときに、すべてのテストケースが期待どおりに機能しているかどうかを確認できるようにすることをお勧めします。

    >

    これはオプションの手順ですが、作成できます。テストケースは次のようになります:

    sql / nvlfunc.sqlファイル:

    SELECT NVL(NULL::SMALLINT, 11::SMALLINT);

    次に、期待される出力を別のファイルに追加できます。期待される出力ファイルは次のようになります:

    expected / nvlfunc.outファイル:

    SELECT NVL(NULL::SMALLINT, 11::SMALLINT);
     nvl 
    -----
      11
    (1 row)

    これはほんの一例です。そのため、追加されるテストケースは1つだけです。ただし、新しい拡張機能を作成するときに、テストケースをさらに追加できます。

    Nvlfunc拡張ディレクトリ構造:

    # mkdir nvlfunc
    # cd nvlfunc
    # ls
    Makefile         nvlfunc.control    nvlfunc--1.0.sql    sql     expected    INSTALL.nvlfunc    README

    長所

    1. PostgreSQLの機能を簡単に拡張できます
    2. 拡張機能の作成とインストールは非常に簡単です
    3. さまざまなバージョンのPostgreSQLでのリグレッションを簡単にテストできます

    短所

    1. 特別な短所はありませんが、拡張機能に追加する機能を使用する前にテストしてください。

    結論

    PostgreSQLの拡張性は非常に強力な機能であり、特定のユースケース向けに独自の拡張機能を作成して、本番データベースで使用できます。 hstore、postgres_fdw、dblinkなどのPostgreSQLコミュニティでサポートされている拡張機能や、Orafceなどのサードパーティの拡張機能があり、すべて特定のユースケースで使用されています。


    1. RETURNING from INSERT ...ONCONFLICTに除外された行を含める方法

    2. データベースでCloseが明示的に呼び出されることはありません

    3. SQL Server Management Studio(SSMS)で複数のクエリと結果を並べて表示する方法-SQL Server/TSQLチュートリアルパート14

    4. 外部サービスでログインする