次の方法で共有


拡張機能とモジュールの使用に関する考慮事項

この記事では、Azure Database for PostgreSQL フレキシブル サーバー インスタンスで特定の拡張機能またはモジュールを使用する場合に注意する必要がある特別な考慮事項について説明します。

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

Azure Database for PostgreSQL フレキシブル サーバー インスタンスで拡張機能を使用するには、次の操作を行う必要があります。

  • 拡張機能を許可します。 拡張機能が許可されていない場合、CREATE EXTENSIONALTER EXTENSIONDROP EXTENSION、または COMMENT ON EXTENSION の実行が失敗し、参照された拡張機能が許可されていないことを示すエラーが表示されます。
  • 拡張機能で、共有メモリの割り当てとアクセスが必要な共有バイナリ ライブラリをデプロイし、サーバーの起動時に読み込む必要がある場合は、 読み込みライブラリに記載されている手順にも従う必要があります。
  • 拡張機能によって配布される SQL オブジェクトを拡張機能でデプロイするデータベース内に拡張機能を作成します
  • 拡張子を削除します。 コマンドを実行するデータベースから、その拡張機能によって配布されたすべての 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
  • 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

pg_buffercache拡張機能を使用して、shared_buffersの内容を調査できます。 この拡張機能を使用すると、(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;

先ほどの例では、プランナーは、テーブル seqscana の結果を使用して、b としてテーブル hashjoin と組み合わせます。

拡張機能 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()

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

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 に依存する可能性があるため、そのようなケースに該当するかどうかを確認してください。

postgres_fdw

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

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

pgstattuple

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

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

Azure Database for PostgreSQL フレキシブル サーバー インスタンスで PostgreSQL バージョン 11 から 13 を使用しているお客様は、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 モジュールを使用するには、サーバーの起動時にそのライブラリが読み込まれていることを確認します。