フレキシブル サーバーで拡張機能とモジュールを使用する場合の考慮事項Azure Database for PostgreSQL

この記事では、フレキシブル サーバーで特定の拡張機能またはモジュールを使用する場合の特別な考慮事項Azure Database for PostgreSQL説明します。

拡張機能に関する一般的な考慮事項

フレキシブル サーバーで拡張機能Azure Database for PostgreSQL使用するには、次の手順を実行する必要があります。

  • 拡張機能を許可します。 拡張機能を許可しない場合、 CREATE EXTENSIONALTER EXTENSIONDROP EXTENSION、または COMMENT ON EXTENSION の実行が失敗し、参照される拡張機能が許可されていないことを示すエラーが表示されます。
  • 拡張機能で、共有メモリの割り当てとアクセスを必要とする共有バイナリ ライブラリをデプロイし、サーバーの起動時に読み込む必要がある場合は、 ロード ライブラリに記載されている手順に従います。
  • その拡張機能に付属する SQL オブジェクトをデプロイするデータベースで、Create extension を実行します。
  • 拡張子を削除します。 データベースから、その拡張機能によって提供されるすべての SQL オブジェクトを削除したい場合。
  • 拡張機能を更新し、既にインストールされている拡張機能によってデプロイされたすべての SQL 成果物を最新バージョンに更新します。
  • インストールされている拡張機能とそれに対応するバージョンを表示します

Azure Database for PostgreSQL フレキシブル サーバーでCREATE EXTENSIONALTER EXTENSIONDROP EXTENSION、またはCOMMENT ON EXTENSIONコマンドの実行中にエラーが発生した場合は、考えられるエラーの一覧と、各エラーの原因を確認してください。

モジュールの一般的な考慮事項

フレキシブル サーバーでモジュールAzure Database for PostgreSQL使用するには、shared_preload_librariesの説明に従って パラメーターにモジュールを追加します。

モジュールを 許可リストに登録する必要はありません。 これは拡張機能の排他的な要件です。

特定の考慮事項がある拡張機能

次の一覧は、フレキシブル サーバーで使用する場合に特定の考慮事項を必要とする、サポートされているすべての拡張機能Azure Database for PostgreSQL列挙します。

  • AGE
  • dblink
  • pg_buffercache
  • pg_cron
  • pg_hint_plan
  • pg_prewarm
  • pg_repack
  • pg_stat_statements
  • pgcrypto
  • postgres_fdw
  • pgstattuple

AGE

Apache AGE 拡張機能は、Azure Database for PostgreSQL でサポートされている PostgreSQL のグラフ拡張機能です。 これは、グラフ データベースの機能、オープン サイファー クエリのサポート、PostgreSQL に格納されているグラフ データに対して複雑なクエリを実行する機能を提供します。 'Apache AGE' は、Apache License 2.0 でリリースされたオープンソース プロジェクトです。

AGE をインストールする

AGE を使用するには、拡張機能を "許可リスト" に設定し、 そのライブラリを読み込み、その機能を使用するデータベースに '拡張機能をインストールする' ことを確認します。

dblink拡張機能を使用すると、1 つのAzure Database for PostgreSQLフレキシブル サーバーから、同じサーバー内の別のデータベースに接続できます。 Azure Database for PostgreSQL では、任意の PostgreSQL サーバーへの受信接続と送信接続の両方がサポートされています。 送信側サーバーでは、受信側サーバーへの送信接続を許可している必要があります。 同様に、受信側サーバーでは、送信側サーバーからの接続を許可している必要があります。

この拡張機能を使用する場合は、 仮想ネットワーク統合を使用してサーバーをデプロイします。 既定では、仮想ネットワーク統合によって、仮想ネットワーク内のサーバー間の接続が可能になります。 仮想ネットワークのネットワーク セキュリティ グループを使用してアクセスをカスタマイズすることもできます。

pg_buffercache

shared_buffersの内容を調べるには、pg_buffercache拡張機能を使用します。 この拡張機能を使用すると、特定のリレーションシップがshared_buffersにキャッシュされているかどうかを判断できます。 この拡張機能は、キャッシュ関連のパフォーマンスの問題のトラブルシューティングに役立ちます。

この拡張機能は PostgreSQL のコア インストールの一部であり、簡単にインストールできます。

CREATE EXTENSION pg_buffercache;

pg_cron

pg_cron 拡張機能は、PostgreSQL のための cron ベースの簡単なジョブ スケジューラであり、拡張機能としてデータベース内で実行されます。 pg_cron 拡張機能では、PostgreSQL データベース内でスケジュールされたメンテナンス タスクを実行できます。 たとえば、テーブルの定期的なバキュームを実行したり、古いデータ ジョブを削除したりできます。

pg_cron 拡張機能では、複数のジョブを並行して実行できますが、一度に実行されるジョブのインスタンスは多くても 1 つです。 最初の実行が完了する前に 2 回目の実行が開始されると、2 回目の実行はキューに登録され、最初の実行が完了するとすぐに開始されます。 このようにすることで、ジョブがスケジュールどおりに正確に実行され、それら自身と同時に実行されないことが保証されます。

shared_preload_libraries に設定される値に pg_cron が含まれていることを確認します。 この拡張機能は、 CREATE EXTENSION を実行する効果としてライブラリを読み込むのをサポートしていません。 拡張機能が shared_preload_libraries に追加されなかった場合、または追加後にサーバーが再起動されなかった場合に CREATE EXTENSION を実行しようとすると、テキストが pg_cron can only be loaded via shared_preload_libraries でヒントが Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf のエラーが発生します。

pg_cron を使用するには、サーバーの起動時にその共有ライブラリが読み込まれること、それが許可リストに載せられていること、それによって作成される SQL 成果物を使用してその機能と対話する任意のデータベースにインストールされていることを確認します。

Examples

  1. 土曜日の午前 3 時 30 分 (GMT) に古いデータを削除する場合。

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. 既定のデータベース postgres で毎日午前 10 時 (GMT) にバキュームを実行する場合。

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. pg_cron からのすべてのタスクのスケジュールを解除する場合。

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. pg_cron で現在スケジュールされているすべてのジョブを表示する場合。

    SELECT * FROM cron.job;
    
  5. test cron ロール アカウントのデータベース azure_pg_admin で、毎日午前 10 時 (GMT) にバキュームを実行する場合。

    SELECT cron.schedule_in_database('VACUUM',' 0 10 * * * ', 'VACUUM', 'testcron',null,TRUE);
    

その他の例

pg_cron バージョン 1.4 以降では、cron.schedule_in_database および cron.alter_job 関数を使用して、それぞれ特定のデータベースでジョブをスケジュールし、既存のスケジュールを更新できます。

cron_schedule_in_database 関数では、オプション パラメーターとしてユーザー名を使用できます。 ユーザー名を null 以外の値に設定するには、PostgreSQL スーパーユーザー特権が必要であり、フレキシブル サーバー Azure Database for PostgreSQLサポートされていません。 上記の例で示したこの関数の実行では、オプションのユーザー名パラメーターを省略しているか null 値に設定しています。これによってジョブは、ジョブをスケジュールしているユーザーのコンテキストで実行され、このユーザーは azure_pg_admin ロールの特権を持っている必要があります。

  1. データベース DBName で土曜日の午前 3 時 30 分 (GMT) に古いデータを削除する場合。

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. 既存のスケジュールのデータベース名を更新または変更する場合

    SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
    

pg_hint_plan

pg_hint_plan拡張機能を使用すると、次のような SQL コメントの "ヒント" を使用して PostgreSQL 実行プランを調整できます。

/*+ SeqScan(a) */

pg_hint_plan 拡張機能では、ターゲット SQL ステートメントで指定された特別な形式のコメント内のヒント フレーズを読み取ります。 特定のフォームは文字シーケンス /*+ で始まり、 */で終わります。 ヒント フレーズは、ヒント名と、それに続くかっこで囲まれスペースで区切られたパラメーターで構成されます。 それぞれのヒント フレーズは、改行で区切ると読みやすくなります。

Example:

/*+
 HashJoin(a b)
 SeqScan(a)
 */
    SELECT *
    FROM pgbench_branches b
    JOIN pgbench_accounts an ON b.bid = a.bid
    ORDER BY a.aid;

前の例では、プランナーがテーブル seqscan に対する a の結果を使用して、テーブル bhashjoin として結合するようになります。

pg_hint_plan拡張機能を使用するには、拡張機能を許可リストに登録し、そのライブラリを読み込み、その機能を使用する予定のデータベースに拡張機能をインストールしてください。

pg_prewarm

pg_prewarm 拡張機能により、リレーショナル データがキャッシュに読み込まれます。 キャッシュを事前にウォームアップしておくと、再起動後に初めて実行した際のクエリの応答時間が短縮されます。 現在、PostgreSQL の自動プレビュー機能は、Azure Database では使用できません。

pg_repack

pg_repack 拡張機能を初めて利用するユーザーは、通常、次のような質問をします: pg_repack は拡張機能ですか、それとも psqlpg_dump のようなクライアント側で実行される実行可能ファイルですか?

pg_repack は実際には両方です。 pg_repack/lib には、拡張機能のコード (作成するスキーマや SQL 成果物、それらの関数のコードを実装する C ライブラリなど) があります。

一方、 pg_repack/bin には、拡張機能に実装されているプログラミング要素と対話する方法を認識するクライアント アプリケーションのコードがあります。 このクライアント アプリケーションは、サーバー側拡張機能によって表示されるさまざまなインターフェイスとの対話の複雑さを軽減することを目的としています。 ユーザーには、わかりやすいいくつかのコマンド ライン オプションが用意されています。 クライアント アプリケーションは、指しているデータベースに拡張機能が作成されていないと役に立ちません。 サーバー側の拡張機能自体は完全に機能しますが、複雑な対話パターンをユーザーが理解する必要があります。 このパターンは、拡張機能によって実装される関数への入力として使用されるデータを取得するクエリの実行で構成されます。

スキーマ再パックのアクセス許可が拒否される

現時点では、拡張機能は再パッケージ スキーマへのアクセス許可を付与するため、pg_repackのコンテキストからのazure_pg_admin機能の実行のみをサポートできます。

azure_pg_adminされていないテーブルの所有者がpg_repackを実行しようとすると、次のエラーが表示されることがあります。

NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR:  permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()

このエラーを回避するには、pg_repackのコンテキストからazure_pg_adminを実行します。

pg_stat_statements

pg_stat_statements拡張機能を使用すると、データベースで実行されるすべてのクエリを表示できます。 この情報は、実稼働システムでのクエリ ワークロードのパフォーマンスを理解するのに役立ちます。

pg_stat_statements拡張機能は、SQL ステートメントの実行統計を追跡する手段を提供するために、Azure Database for PostgreSQLフレキシブル サーバーごとにshared_preload_librariesに事前に読み込まれます。

セキュリティ上の理由から、pg_stat_statements拡張機能許可リストに登録し、CREATE EXTENSION コマンドを使用してインストールする必要があります。

拡張機能によって追跡されるステートメントを制御する設定 pg_stat_statements.track は、既定では top に設定されており、クライアントから直接発行されたすべてのステートメントが追跡されることを意味します。 その他の 2 つの追跡レベルは noneall です。 この設定はパラメーターとして構成できます。

各 SQL ステートメントがログに記録されるため、 pg_stat_statements 拡張機能が提供するクエリ実行情報とサーバーのパフォーマンスにはトレードオフがあります。 pg_stat_statements拡張機能をアクティブに使用していない場合は、pg_stat_statements.tracknone に設定します。 一部のサード パーティ監視サービスはクエリ パフォーマンスの分析情報を提供するために pg_stat_statements に依存する可能性があるため、そのようなケースに該当するかどうかを確認してください。

pgcrypto

Azure Database for PostgreSQLでは、pgcrypto PostgreSQL 拡張機能を使用したアプリケーション レベルの列レベルの暗号化がサポートされます。 pgcrypto 拡張機能を使用すると、アプリケーションは PostgreSQL SQL ステートメントで暗号化関数を明示的に呼び出し、基になる OpenSSL ライブラリによって提供される暗号化アルゴリズムを使用して列の値を暗号化またはハッシュできます。

Azure Linux 3.0 以降では、OS は OpenSSL 3.0 を使用します。これは、古くて弱い暗号化アルゴリズムと低レベルの API をいくつか、既定で読み込まれていない別のレガシ プロバイダーに移行します。 この変更により、より安全な最新の暗号アルゴリズムと高度な OpenSSL EVP (エンベロープ) API の使用が促進されます。

その結果、OpenSSL 3.0 でレガシとして分類される暗号アルゴリズムは、Azure Linux 3.0 で実行されている Azure Database for PostgreSQL サーバーでは、pgcrypto で既定では使用できません。

非推奨の暗号化アルゴリズム

次の従来の暗号アルゴリズムは OpenSSL 3.0 レガシ プロバイダーにあり、Linux 3.0 Azure実行されているAzure Database for PostgreSQL サーバーでは既定では使用できません。 以前のバージョンのプラットフォームでは pgcrypto でこれらのアルゴリズムの使用が許可されている可能性がありますが、linux 3.0 Azureではサポートされなくなりました。

対称暗号化アルゴリズム (暗号)

  • Blowfish (BF-CBC)
  • CAST
  • DES (3DES ではなく単一の DES)
  • アイデア
  • RC2
  • RC4
  • RC5
  • 種子

メッセージ ダイジェストとハッシュ アルゴリズム

  • MD2
  • MD4
  • MDC2
  • RIPEMD-160
  • SHA-1 (デジタル署名では非推奨ですが、構成によっては特定の HMAC シナリオで引き続き許可される場合があります)
  • ワールプール

Azure Linux 3.0 へのAzure Database for PostgreSQLアップグレードは、継続的なプラットフォームの改善の一部です。 pgcrypto に依存するアプリケーションでは、アプリケーション レベルの列レベルの暗号化を実行するときに、サポートされている最新の暗号化アルゴリズムを使用する必要があります。

postgres_fdw

postgres_fdw拡張機能を使用すると、1 つのAzure Database for PostgreSQLフレキシブル サーバーから別のサーバーまたは同じサーバー内の別のデータベースに接続できます。 Azure Database for PostgreSQL では、任意の PostgreSQL サーバーへの受信接続と送信接続の両方がサポートされています。 送信側サーバーでは、受信側サーバーへの送信接続を許可している必要があります。 同様に、受信側サーバーでは、送信側サーバーからの接続を許可している必要があります。

この拡張機能を使用する場合は、 仮想ネットワーク統合を使用してサーバーをデプロイします。 既定では、仮想ネットワーク統合によって、仮想ネットワーク内のサーバー間の接続が可能になります。 仮想ネットワークのネットワーク セキュリティ グループを使用してアクセスをカスタマイズすることもできます。

pgstattuple

pgstattuple拡張機能を使用して、Postgres 11 から 13 のバージョンでpg_toast スキーマに保持されているオブジェクトからタプル統計を取得しようとすると、"スキーマ pg_toastのアクセス許可が拒否されました" というエラーが表示されます。

スキーマ pg_toast へのアクセス許可が拒否されました

フレキシブル サーバーで PostgreSQL バージョン 11 から 13 Azure Database for PostgreSQL使用しているお客様は、pgstattuple スキーマ内のオブジェクトに対してpg_toast拡張機能を使用できません。

PostgreSQL 16 および 17 では、 pg_read_all_data ロールが自動的に azure_pg_admin に付与されるため、 pgstattuple が正しく機能します。 PostgreSQL 14 および 15 では、同じ結果を得るために、お客様は pg_read_all_data ロールを azure_pg_admin に手動で付与できます。 しかし、PostgreSQL 11 から 13 には、pg_read_all_data ロールは存在しません。

お客様は、必要なアクセス許可を直接付与することはできません。 pgstattuple スキーマのオブジェクトにアクセスするためにpg_toastを実行する必要がある場合は、Azure サポート要求の作成に進みます。

timescaleDB

timescaleDB 拡張機能は、PostgreSQL の拡張機能としてパッケージ化された時系列データベースです。 時間指向の分析関数と最適化が提供され、時系列ワークロードに合わせて PostgreSQL がスケーリングされます。 Timescale, Inc. Azure Database for PostgreSQL の登録商標である TimescaleDB の詳細については、TimescaleDB Apache-2 エディションを提供しています。

TimescaleDB のインストール

timescaleDBを使用するには、拡張機能を許可リストに登録し、そのライブラリを読み込み、その機能を使用する予定のデータベースに拡張機能をインストールしてください。

ゼロ から TimescaleDB ハイパーテーブルを作成したり、 PostgreSQL で既存の時系列データを移行したりできるようになりました。

pg_dumppg_restoreを使用したタイムスケール データベースの復元の詳細については、タイムスケールのドキュメントを参照してください

timescaledb-backup を使用して Timescale データベースを復元する

SELECT timescaledb_post_restore() プロシージャの実行中に、timescaledb.restoring フラグを更新するときにアクセス許可が拒否される場合があります。 このエラーが発生する理由は、クラウドの PaaS データベース サービスの ALTER DATABASE 権限が制限されているためです。 この場合は、timescaledb-backup ツールを使用して、Timescale データベースをバックアップおよび復元する別の方法を実行できます。 Timescaledb-backup は、TimescaleDB データベースのダンプと復元をよりシンプルにし、エラーが発生しにくくし、パフォーマンスを向上させるプログラムです。

これを行うには、次の手順に従います。

  1. ここで詳しく説明されているように、ツールをインストール します

  2. 移行先の Azure Database for PostgreSQL フレキシブル サーバーとデータベースを作成します。

  3. Timescale 拡張機能を有効にします。

  4. azure_pg_admin で使用されるユーザーにロールを付与します。

  5. ts-restore を実行してデータベースを復元します。

これらのユーティリティの詳細については、 こちらをご覧ください

拡張機能とメジャー バージョン アップグレード

Azure Database for PostgreSQLでは、Azure Database for PostgreSQL フレキシブル サーバーのインプレース アップグレードを実行するインプレース メジャー バージョンのアップグレード機能が提供され、ユーザーによる簡単な操作が可能です。 インプレース メジャー バージョンのアップグレードにより、Azure Database for PostgreSQL のアップグレード プロセスが簡略化され、サーバーにアクセスするユーザーとアプリケーションの中断が最小限に抑えられます。 インプレース メジャー バージョン アップグレードでは、特定の拡張機能がサポートされません。また、特定の拡張機能のアップグレードにはいくつかの制限があります。

インプレース メジャー バージョン更新機能を使用する場合、拡張機能anonApache AGEdblinkorafcepostgres_fdw、およびtimescaledbは、すべてのAzure Database for PostgreSQLフレキシブル サーバー バージョンでサポートされるわけではありません。

特定の考慮事項があるモジュール

次の一覧は、Azure Database for PostgreSQLフレキシブル サーバーで使用する場合に特定の考慮事項を必要とする、サポートされているすべてのモジュールを列挙しています。

  • pg_failover_slots

pg_failover_slots

pg_failover_slots モジュールは、論理レプリケーションと高可用性が有効なサーバーの両方で動作する場合に、Azure Database for PostgreSQL を強化します。 これは、フェールオーバー後に、論理レプリケーション スロットを保持しない標準の PostgreSQL エンジン内の課題に効果的に対処します。 これらのスロットを維持することは、プライマリ サーバーの役割の変更中にレプリケーションの一時停止やデータの不一致を防止し、運用継続性とデータ整合性を確保するために重要です。

この拡張機能は、フェールオーバー プロセスを合理化するために必要な転送、クリーンアップ、およびレプリケーション スロットの同期を管理して、それによりサーバーの役割の変更時にシームレスな移行を提供します。

pg_failover_slots モジュールの使用方法の詳細と手順については、GitHub ページを参照してください。

pg_failover_slots モジュールを使用するには、サーバーの起動時にそのライブラリが読み込まれていることを確認します。