PostgreSQL の拡張機能

PostgreSQL では、SQL オブジェクトを 1 つのパッケージにバンドルして 1 つのユニットとして使用することで、データベースの機能を拡張できます。このページでは、PostgreSQL の拡張機能と、Cloud SQL によってサポートされている拡張機能について説明します。

PostgreSQL 拡張機能の使用

Cloud SQL でサポートされている拡張機能のみをインストールできます。

拡張機能のインストール

拡張機能は、次の方法でインストールした後に使用します。

スーパーユーザー権限の要件

Cloud SQL では、拡張機能は cloudsqlsuperuser ロールの一部であるユーザーのみが作成できます。新しい PostgreSQL インスタンスを作成する場合、デフォルトの postgres ユーザーが作成されます(ただし、ユーザーのパスワードを設定する必要があります)。デフォルトの postgres ユーザーは cloudsqlsuperuser ロールの一部です。詳細については、PostgreSQL ユーザーをご覧ください。

データベース間の接続

接続されるインスタンスは、接続するインスタンスと同じ VPC ネットワーク内にある必要があります。

Google Cloud Console では、クラスタ インスタンスの [SSL 接続のみ許可] ボタンは選択できません。また、同じインスタンス内の他のデータベースに接続する場合、ホストを localhost または 127.0.0.1 には設定できません。代わりに、Google Cloud Console のインスタンスに表示される IP アドレスを使用する必要があります。

新しい拡張機能のサポートのリクエスト

Cloud SQL で独自の拡張機能は作成できません。

拡張機能のサポートをリクエストするには、「Me, too!」の票を Issue TrackerCloud SQL の下)の該当する問題に入れるか、新しい問題を作成します。

Cloud SQL でサポートされている PostgreSQL 拡張機能

具体的な拡張機能の使用方法については、下表のいずれかのドキュメント リンクをご覧ください。

Cloud SQL がサポートする PostgreSQL 拡張機能は、次のカテゴリに分類できます。

PostGIS

PostGIS 3.0 拡張機能は、Cloud SQL for PostgreSQL のすべてのメジャー バージョンでサポートされています。

次の表に、Cloud SQL for PostgreSQL の各バージョンの PostGIS 拡張機能のバージョンを示します。

Cloud SQL for PostgreSQL のバージョン PostGIS 拡張機能
PostgreSQL 9.6 2.3.11, 3.0.3
PostgreSQL 10 2.4.9, 3.0.3
PostgreSQL 11 2.5.5, 3.0.3
PostgreSQL 12 3.0.3
PostgreSQL 13 3.0.3
PostgreSQL 14 3.1.4

特定の PostgreSQL メジャー バージョンの場合、CREATE EXTENSION コマンドに VERSION 句を使用して PostGIS 拡張機能バージョンを指定できます。

PostGIS 拡張機能には次のものが含まれます。

詳細については、PostGIS のインストールをご覧ください。

データ型拡張機能

拡張機能 説明
btree_gin B-tree と同等の動作を実装するサンプル GIN 演算子クラスを指定します。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.0 を使用します。PostgreSQL 10 はバージョン 1.2 を使用します。他のすべてのバージョンではバージョン 1.3 が使用されます。
btree_gist B-tree と同等の動作を実装する GiST インデックス演算子クラスを指定します。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.2 を使用します。PostgreSQL 10、11、12、13 はバージョン 1.5 を使用します。PostgreSQL 14 はバージョン 1.6 を使用します。
chkpass 暗号化されたパスワードを保存するためのデータ型 chkpass を実装します。
Cloud SQL for PostgreSQL 9.6、10 はバージョン 1.0 を使用します。他のバージョンではサポートされていません。
citext 大文字と小文字を区別しない文字列型 citext を提供します。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.3 を使用します。PostgreSQL 10 はバージョン 1.4 を使用します。PostgreSQL 11 はバージョン 1.5 を使用します。PostgreSQL 12、13、14 はバージョン 1.6 を使用します。
cube 多次元キューブを表すためのデータ型 cube を実装します。
Cloud SQL for PostgreSQL 9.6 と 10 はバージョン 1.2 を使用します。PostgreSQL 11 はバージョン 1.3 を使用します。PostgreSQL 12 と 13 はバージョン 1.4 を使用します。PostgreSQL 14 はバージョン 1.5 を使用します。
hstore 1 つの PostgreSQL 値に Key-Value ペアのセットを格納するための hstore データ型を実装します。
Cloud SQL for PostgreSQL 9.6 と10 はバージョン 1.4 を使用します。PostgreSQL 11 はバージョン 1.5 を使用します。PostgreSQL 12 はバージョン 1.6 を使用します。PostgreSQL 13 はバージョン 1.7 を使用します。PostgreSQL 14 はバージョン 1.8 を使用します。
isn 一部の国際製品番号付け規則に対応するデータ型を提供します。
Cloud SQL for PostgreSQL 9.6 と10 はバージョン 1.1 を使用します。他のすべてのバージョンではバージョン 1.2 が使用されます。
ip4r IPv4 と v6 のアドレス、アドレス範囲に加え、インデックスのサポートに対応するデータ型を提供します。
Cloud SQL for PostgreSQL はバージョン 2.4 を使用します。
ltree 格納されているデータのラベルを階層型ツリー構造で表すためのデータ型 ltree を実装します。
Cloud SQL for PostgreSQL 9.6、10、11、12 はバージョン 1.1 を使用します。PostgreSQL 13 と 14 はバージョン 1.2 を使用します。
lo 大きいオブジェクトを管理するためのサポート(LO や BLOB とも呼ばれる)。
Cloud SQL for PostgreSQL はバージョン 1.1 を使用します。
postgresql-hll 新しいデータ型 hll を導入します。これは、HyperLogLog データ構造です。以下の postgresql-hll セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 2.16 を使用します。
prefix プレフィックス マッチングとインデックス サポートを提供します。
Cloud SQL for PostgreSQL はバージョン 1.2.0 を使用します。

言語拡張機能

拡張機能 説明
plpgsql 関数、手続き、トリガー作成用の読み込み可能なプロシージャル言語。この言語を使用して、DO ブロック内のコードを直接実行することも可能です。
Cloud SQL for PostgreSQL はバージョン 1.0 を使用します。

その他の拡張機能

拡張機能 説明
auto_explain トラブルシューティングなどのため、実行速度が遅いステートメントの実行プランを自動的にロギングします。EXPLAIN コマンドの機能を自動的に実行します。以下の auto_explain セクションもご覧ください。
dblink データベース セッション内から PostgreSQL データベースに接続する関数を提供します。以下の dblink セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 1.2 を使用します。
dict_int 整数のインデックス作成を制御する、全文検索用のアドオン辞書テンプレート。
Cloud SQL for PostgreSQL はバージョン 1.0 を使用します。
earthdistance 地球上の大圏距離を計算する 2 つの方法を提供します。
Cloud SQL for PostgreSQL はバージョン 1.1 を使用します。
fuzzystrmatch 文字列間の類似性と相違性を特定するためのいくつかの関数を提供します。
Cloud SQL for PostgreSQL はバージョン 1.1 を使用します。
intagg 整数型のアグリゲータと列挙子を提供します。
Cloud SQL for PostgreSQL はバージョン 1.1 を使用します。
intarray null を含まない整数の配列を操作し、インデックス検索を行う関数と演算子のセットを提供します。
Cloud SQL for PostgreSQL 9.6、10、11、12 はバージョン 1.2 を使用します。PostgreSQL 13 はバージョン 1.3 を使用します。 PostgreSQL 14 はバージョン 1.5 を使用します。
pageinspect データベース ページのコンテンツを低レベルで検査します。以下の pageinspect セクションもご覧ください。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.5 を使用します。PostgreSQL 10 はバージョン 1.6 を使用します。PostgreSQL 11 と12 はバージョン 1.7 を使用します。PostgreSQL 13 と 14 はバージョン 1.8 を使用します。
pgaudit 監査データを収集します。
Cloud SQL for PostgreSQL 9.6 は、pgaudit バージョン 1.1.3 を使用します。PostgreSQL 10 はバージョン 1.2.2 を使用します。PostgreSQL 11 はバージョン 1.3.2 を使用します。PostgreSQL 12 はバージョン 1.4.1 を使用します。PostgreSQL 13 はバージョン 1.5 を使用します。PostgreSQL 14 はバージョン 1.6 を使用します。この拡張機能を Cloud SQL で使用する方法については、pgAudit を使用した PostgreSQL の監査をご覧ください。
pg_buffercache 共有バッファ キャッシュ内でリアルタイムで発生していることを調査する方法を提供します。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.2 を使用します。PostgreSQL 10、11、12、13、14 はバージョン 1.3 を使用します。
pgcrypto PostgreSQL に対応する暗号化機能を提供します。
Cloud SQL for PostgreSQL はバージョン 1.3 を使用します。
pglogicalPostgreSQL の論理レプリケーションを提供します。論理レプリケーションの設定をご覧ください。
Cloud SQL for PostgreSQL はバージョン 2.4.0 を使用します。
pgfincore オペレーティング システムのディスク キャッシュ メモリ内のページを PostgreSQL から管理するための一連の関数。以下の pgfincore セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 1.2 を使用します。
pg_freespacemap 空き領域マップ(FSM)を調べます。以下の pg_freespacemap セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 1.2 を使用します。
pg_hint_plan SQL コメントの簡単な説明であるヒントを使用して、PostgreSQL の実行プランを改善できます。以下の pg_hint_plan セクションもご覧ください。
pg_partman 時間ベースおよびシリアル番号ベースのテーブル パーティション セットを作成して管理できます。以下の pg_partman セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 4.5.1 を使用します。
pg_prewarm 関連データをオペレーティング システムのバッファ キャッシュ、または PostgreSQL バッファ キャッシュのいずれかに読み込むための便利な方法を提供します。
Cloud SQL for PostgreSQL 9.6 と 10 はバージョン 1.1 を使用します。PostgreSQL 11、12、13、14 はバージョン 1.2 を使用します。
pg_proctab Cloud SQL for PostgreSQL で pg_top を使用し、オペレーティング システムのプロセス テーブルからレポートを生成できます。以下の pg_proctab セクションもご覧ください。
pg_repack テーブルとインデックスから肥大化した部分を削除できます。必要に応じて、オンライン CLUSTER(cluster index 順にテーブルを並べ替える)を実行できます。以下の pg_repack セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 1.4.7 を使用します。
pgrowlocks 指定した表の行のロック情報を提供します。
Cloud SQL for PostgreSQL はバージョン 1.2 を使用します。
pgstattuple タプルレベルの統計情報を取得する、さまざまな関数を提供します。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.4 を使用します。他のすべてのバージョンではバージョン 1.5 が使用されます。
pg_similarity PostgreSQL で類似性クエリをサポートします。
Cloud SQL for PostgreSQL はバージョン 1.0 を使用します。
pg_stat_statements 実行されたすべての SQL ステートメントの実行統計を追跡する方法を提供します。
Cloud SQL for PostgreSQL 9.6 はバージョン 1.4 を使用します。PostgreSQL 10、11 はバージョン 1.6 を使用します。PostgreSQL 12 はバージョン 1.7 を使用します。PostgreSQL 13 はバージョン 1.8 を使用します。 PostgreSQL 14 はバージョン 1.9 を使用します。
pgTAP PL/pgSQL と PL/SQL で記述された、PostgreSQL の単体テスト フレームワークを提供します。
Cloud SQL for PostgreSQL はバージョン 1.1.0 を使用します。
pg_trgm トライグラム照合により英数字の類似性を判断する関数と演算子を提供します。また、類似文字列の高速検索をサポートするインデックス演算子クラスも提供します。
Cloud SQL for PostgreSQL 9.6 と10 はバージョン 1.3 を使用します。PostgreSQL 11、12 はバージョン 1.4 を使用します。PostgreSQL 13 はバージョン 1.5 を使用します。PostgreSQL 14 はバージョン 1.6 を使用します。
pg_visibility テーブルの可視性マップ(VM)とページレベルの可視性情報を検査する手段を提供します。pg_visibility セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 1.2 を使用します。
PL/Proxy PostgreSQL データベース間でのリモート プロシージャ コールを可能にするプロシージャル言語ハンドラ。オプションでシャーディングを含みます。 以下の PL/Proxy セクションもご覧ください。
Cloud SQL for PostgreSQL はバージョン 2.10.0 を使用します。
postgres_fdw 複数のインスタンス内または複数インスタンスにわたる外部データラッパーを作成できます。以下の postgres_fdw セクションもご覧ください。
Cloud SQL for PostgreSQL 9.6、10、11、12、13 はバージョン 1.0 を使用します。PostgreSQL 14 はバージョン 1.1 を使用します。
sslinfo インスタンスに接続されたときに現在のクライアントによって提供された SSL 証明書に関する情報を提供します。
Cloud SQL for PostgreSQL はバージョン 1.2 を使用します。
tablefunc テーブル(複数行)を返すさまざまな関数が含まれています。
Cloud SQL for PostgreSQL はバージョン 1.0 を使用します。
tsm_system_rows SELECT コマンドの TABLESAMPLE 句で使用できるテーブル サンプリング メソッド SYSTEM_ROWS を提供します。
Cloud SQL for PostgreSQL はバージョン 1.0 を使用します。
tsm_system_time SELECT コマンドの TABLESAMPLE 句で使用できるテーブル サンプリング メソッド SYSTEM_TIME を提供します。
Cloud SQL for PostgreSQL はバージョン 1.0 を使用します。
unaccent 語彙素からアクセント(分音符)を削除するテキスト検索辞書。
Cloud SQL for PostgreSQL はバージョン 1.1 を使用します。
uuid-ossp 標準アルゴリズムの 1 つを使用して Universally Unique Identifier(UUID)を生成する関数を提供します。
Cloud SQL for PostgreSQL はバージョン 1.1 を使用します。

PostgreSQL 拡張機能の詳細

このセクションでは、上記の表に示したサポートされている PostgreSQL の拡張機能の一部についてさらに詳しく説明します。

auto_explain

インスタンスでこの拡張機能を使用するには、cloudsql.enable_auto_explain フラグを on に設定します。フラグの設定方法とこの拡張機能でサポートされるフラグの詳細については、データベース フラグを構成するをご覧ください。

また、cloudsqlsuperuser ロールのみを持つユーザーの場合は、load コマンドを使用して、この拡張機能を 1 つのセッション用に読み込むことができます。

データベース セッション内から、この拡張機能を使用して PostgreSQL データベースに接続し、クエリを実行できます。

現在、この拡張機能は、同じ VPC ネットワーク内の 2 つの Cloud SQL プライベート IP インスタンス、または同じインスタンス内のクロス データベースに対して機能します。

詳細については、ドキュメントをご覧ください。

データベースに接続、または別のユーザーとして同じインスタンスに接続するには、パスワードを指定する必要があります。例として(ただし、本番環境には使用できません)、コード スニペットを次に示します。


  SELECT * FROM dblink (
    'dbname=name port=1234 host=host user=user password=password',
    'select id, name from table' \
  ) AS t(id int, name text);

また、接続だけを設定する場合の例として、コード スニペットを以下に示します(本番環境には使用できません)。

  SELECT dblink_connect('dbname=dblinktest user=postgres host=name_or_ip password=xxx');

同じユーザーとして同じインスタンスに接続する場合、パスワードなしで接続できます。次に例を示します。

  1. パスワードなしでローカル接続を有効にするには、次のデータベース フラグを設定します。
    cloudsql.allow_passwordless_local_connections

  2. ホストを指定せずに接続します。これは、同じインスタンスに接続することを意味します。以下に例を示します。

    SELECT *
      FROM dblink('dbname=finance user=alice',
                  'select income from revenue')
        AS revenue(income integer);
    

    結果は次のようになります。

          income
          --------
          1000
          (1 row)
    

同じインスタンス内のデータベースに接続する場合、ホストを localhost または 127.0.0.1 には設定できません。代わりに、Google Cloud Console のインスタンスに表示される IP アドレスを使用する必要があります。

postgres_fdwPL/Proxy もご覧ください。

pageinspect

この拡張可能は、データベース ページのコンテンツを低レベルで検査します。バージョン固有の詳細については、ドキュメントをご覧ください。

pg_cron

インスタンスで pg_cron の使用を開始するには、cloudsql.enable_pg_cron フラグを on に設定します。フラグの設定方法とこの拡張機能でサポートされるフラグの詳細については、データベース フラグを構成するをご覧ください。

ジョブはバックグラウンド ワーカーとして構成されています。このため、バックグラウンド ワーカーの数を調整するには、PostgreSQL の標準的な方法(max_worker_processes フラグなど)を使用する必要があります。

Cloud SQL では、この拡張機能はバックグラウンド ワーカー モードでサポートされます。libpq インターフェースはサポートされません。したがって、この拡張機能に直接関連する信頼認証は不要です。

pgfincore

この拡張機能には、オペレーティング システムのディスク キャッシュ メモリ内のページを PostgreSQL から管理するための関数が含まれています。バージョン固有の詳細については、ドキュメントをご覧ください。

pg_freespacemap

この拡張機能は、空き容量マップ(FSM)を調べます。バージョン固有の詳細については、ドキュメントをご覧ください。

pg_hint_plan

インスタンスでこの拡張機能を使用するには、cloudsql.enable_pg_hint_plan フラグを on に設定します。フラグの設定方法とこの拡張機能でサポートされるフラグの詳細については、データベース フラグを構成するをご覧ください。

また、cloudsqlsuperuser ロールを持つユーザーに対してのみ、load コマンドを使用して、1 つのセッションでこの拡張機能を読み込むことができます。

pg_partman

この拡張機能を使用すると、時間ベースおよびシリアルベースのテーブル パーティション セットを作成、管理できます。

Cloud SQL では、この拡張機能にはパーティションの自動メンテナンスのバックグラウンド ワーカーは含まれていません。代わりに、Cloud Scheduler などを使用して、定期的にメンテナンス関数を呼び出すことでメンテナンスを推進できます。

pg_proctab

pg_proctab 拡張機能を使用して pg_top ユーティリティを有効にする手順は次のとおりです。

  1. psql ツールで、pg_proctab の CREATE EXTENSION コマンドを実行します。
  2. pg_top をダウンロードして実行します。
  3. Cloud SQL for PostgreSQL インスタンスに接続する場合は、リモート データベースに接続するための -r オプションを追加して指標を取得します。

出力に含まれる次のインスタンス全体の指標には、インスタンス内の他のサポート エージェントとサービスの使用状況が含まれます。

  • 負荷の平均
  • CPU の状態(% user、nice、system、idid、iowait)
  • メモリ(使用済み、空き、キャッシュ)

pg_repack

この拡張機能を使用すると、テーブルとインデックスから肥大化した部分を削除できます。必要に応じて、この拡張機能を使用してオンライン CLUSTER(cluster index 順にテーブルを並べ替える)を実行できます。バージョン固有の詳細については、ドキュメントをご覧ください。また、Cloud SQL でこの拡張機能を使用するには、ユーザーに権限を追加するための特別な手順が必要です。

上記で説明したように、新しい PostgreSQL インスタンスを作成すると、デフォルト postgres ユーザーが作成されます(ただし、パスワードは設定する必要があります)。そのデフォルト postgres ユーザーは、cloudsqlsuperuser ロールのユーザーです。cloudsqlsuperuser 以外のユーザーが拡張機能を使用する場合は、権限を追加する必要があります。次の例では、grant コマンドを使用して必要な権限を追加します。

権限の追加例

以の例では、csuper1cloudsqlsuperuser で、testdbtestuser が所有するデータベースです。testdb に pg_repack 拡張機能を作成するには、最初に次のコマンドを実行します。

  1. cloudsqlsuperuser として testdb に接続します。

    psql -U csuper1 -d testdb;
    
  2. データベース オーナー(testuser,)を csuper1 に付与します。

    GRANT testuser TO csuper1;
    
  3. 次の手順で拡張機能を作成します。

    CREATE EXTENSION pg_repack;
    
  4. ステップ 2 で実行した権限を取り消します。

     REVOKE testuser FROM csuper1;
    
  5. testdbt1 などのテーブルで pg_repack コマンドを csuper1 として実行します。

    pg_repack -h <hostname> -d testdb -U csuper1 -k -t t1
    

pg_repack コマンドは次のエラーで失敗する場合があります:
"ERROR: query failed: SSL SYSCALL error: EOF detected"

このエラーが発生した場合は、TCP キープアライブを小さい値に設定してから、pg_repack コマンドを実行してください。詳細については、Compute Engine からの接続をご覧ください。

pg_visibility

この拡張機能は、テーブルの可視性マップ(VM)とページレベルの可視性情報を検査する手段を提供します。バージョン固有の詳細については、ドキュメントをご覧ください。

PL/Proxy

この拡張機能は、PostgreSQL データベース間でのリモート プロシージャ コールを可能にするプロシージャル言語ハンドラです。オプションでシャーディングを含みます。

バージョン固有の詳細については、ドキュメントをご覧ください。

接続されるインスタンスは、接続するインスタンスと同じ VPC ネットワーク内にある必要があります。また、Google Cloud Console で、クラスタ インスタンスの [SSL 接続のみ許可] ボタンは選択できません。

同じインスタンス内のデータベースに接続する場合、ホストを localhost または 127.0.0.1 には設定できません。代わりに、Google Cloud Console のインスタンスに表示される IP アドレスを使用する必要があります。

postgres_fdwdblink もご覧ください。

postgres_fdw

この拡張機能を使用すると、他の(「外部」)PostgreSQL データベースのテーブルを現在のデータベースの「外部」テーブルとして公開できます。このテーブルは、ローカルのテーブルとほぼ同じように使用できます。バージョン固有の詳細については、ドキュメントをご覧ください。

現在、この拡張機能は、同じ VPC ネットワーク内の 2 つの Cloud SQL プライベート IP インスタンス、または同じインスタンス内のクロス データベースに対して機能します。

同じインスタンス内のデータベースに接続する場合、ホストを localhost または 127.0.0.1 には設定できません。代わりに、Google Cloud Console のインスタンスに表示される IP アドレスを使用する必要があります。

また、Google Cloud Console では、外部データが保存されているインスタンスに対して [SSL 接続のみ許可] ボタンは選択できません。cloudsqlsuperuser のみが postgres_fdw 外部データラッパーのオーナーになることができます。

PL/Proxydblink もご覧ください。

postgresql-hll

この拡張機能は、新しいデータ型 hll を導入します。HyperLogLog データ構造です。バージョン固有の詳細については、ドキュメントをご覧ください。