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 2.3 拡張機能ファミリーPostGIS 3.0 拡張機能は Cloud SQL でサポートされています(JSON-C もサポートされています)。これには次の拡張機能が含まれます。

PostgreSQL 9.6 は postgis をサポートしません。PostgreSQL 11 はバージョン 2.5.1 を使用します。PostgreSQL 12 と 13 はバージョン 3.0.0 を使用します。

postgis_sfcgal 拡張機能はサポートされていません。

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

データ型拡張機能

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

言語拡張機能

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

その他の拡張機能

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

PostgreSQL 拡張機能の詳細

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

データベース セッション内から、この拡張機能を使用して 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

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

pgfincore

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

pg_freespacemap

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

pg_partman

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

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

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 データベース間でのリモート プロシージャ コールを可能にするプロシージャル言語ハンドラです。オプションでシャーディングを含みます。

バージョン固有の詳細については、ドキュメントをご覧ください。PL/Proxy 2.9 は PostgreSQL 11 と 12 でサポートされています。

接続されるインスタンスは、接続するインスタンスと同じ 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 データ構造です。バージョン固有の詳細については、ドキュメントをご覧ください。