PostgreSQL では、SQL オブジェクトを 1 つのパッケージにバンドルして 1 つのユニットとして使用することで、データベースの機能を拡張できます。このページでは、PostgreSQL の拡張機能と、Cloud SQL によってサポートされている拡張機能について説明します。
PostgreSQL 拡張機能を使用する
Cloud SQL でサポートされている拡張機能のみをインストールできます。
拡張機能をインストールする
拡張機能は、次の方法でインストールした後に使用します。
- psql ツールで、CREATE EXTENSION コマンドを実行します。
スーパーユーザー権限の要件
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 Tracker(Cloud 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
postgis_raster
postgis_sfcgal
postgis_tiger_geocoder
postgis_topology
address_standardizer
address_standardizer_data_us
詳細については、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.4 を使用します。PostgreSQL 10 はバージョン 1.2.3 を使用します。PostgreSQL 11 はバージョン 1.3.3 を使用します。PostgreSQL 12 はバージョン 1.4.2 を使用します。PostgreSQL 13 はバージョン 1.5.1 を使用します。PostgreSQL 14 はバージョン 1.6.1 を使用します。この拡張機能を 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 を使用します。 |
pglogical | PostgreSQL の論理レプリケーションを提供します。論理レプリケーションの設定をご覧ください。 Cloud SQL for PostgreSQL はバージョン 2.4.1 を使用します。 |
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 つのセッション用に読み込むことができます。
dblink
データベース セッション内から、この拡張機能を使用して PostgreSQL データベースに接続し、クエリを実行できます。
現在、この拡張機能は、同じ VPC ネットワーク内の 2 つの Cloud SQL プライベート IP インスタンス、または同じインスタンス内のクロス データベースに対して機能します。
詳細については、ドキュメントをご覧ください。
dblink を使用してパスワードで接続する
データベースに接続、または別のユーザーとして同じインスタンスに接続するには、パスワードを指定する必要があります。例として(ただし、本番環境には使用できません)、コード スニペットを次に示します。
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');
dblink を使用してパスワードなしで接続する
同じユーザーとして同じインスタンスに接続する場合、パスワードなしで接続できます。次に例を示します。
パスワードなしでローカル接続を有効にするには、次のデータベース フラグを設定します。
cloudsql.allow_passwordless_local_connections
ホストを指定せずに接続します。これは、同じインスタンスに接続することを意味します。以下に例を示します。
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_fdw と PL/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 ユーティリティを有効にする手順は次のとおりです。
- psql ツールで、pg_proctab の CREATE EXTENSION コマンドを実行します。
- pg_top をダウンロードして実行します。
- Cloud SQL for PostgreSQL インスタンスに接続する場合は、リモート データベースに接続するための
-r
オプションを追加して指標を取得します。
出力に含まれる次のインスタンス全体の指標には、インスタンス内の他のサポート エージェントとサービスの使用状況が含まれます。
- 負荷の平均
- CPU の状態(% user、nice、system、idid、iowait)
- メモリ(使用済み、空き、キャッシュ)
pg_repack
この拡張機能を使用すると、テーブルとインデックスから肥大化した部分を削除できます。必要に応じて、この拡張機能を使用してオンライン CLUSTER(cluster index 順にテーブルを並べ替える)を実行できます。バージョン固有の詳細については、ドキュメントをご覧ください。また、Cloud SQL でこの拡張機能を使用するには、ユーザーに権限を追加するための特別な手順が必要です。
上記で説明したように、新しい PostgreSQL インスタンスを作成すると、デフォルト postgres
ユーザーが作成されます(ただし、パスワードは設定する必要があります)。そのデフォルト postgres
ユーザーは、cloudsqlsuperuser
ロールのユーザーです。cloudsqlsuperuser
以外のユーザーが拡張機能を使用する場合は、権限を追加する必要があります。次の例では、grant
コマンドを使用して必要な権限を追加します。
権限の追加例
以の例では、csuper1
は cloudsqlsuperuser
で、testdb
は testuser
が所有するデータベースです。testdb
に pg_repack 拡張機能を作成するには、最初に次のコマンドを実行します。
cloudsqlsuperuser
としてtestdb
に接続します。psql -U csuper1 -d testdb;
データベース オーナー(
testuser,
)をcsuper1
に付与します。GRANT testuser TO csuper1;
次の手順で拡張機能を作成します。
CREATE EXTENSION pg_repack;
ステップ 2 で実行した権限を取り消します。
REVOKE testuser FROM csuper1;
testdb
のt1
などのテーブルで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_fdw と dblink もご覧ください。
postgres_fdw
この拡張機能を使用すると、他の(「外部」)PostgreSQL データベースのテーブルを現在のデータベースの「外部」テーブルとして公開できます。このテーブルは、ローカルのテーブルとほぼ同じように使用できます。バージョン固有の詳細については、ドキュメントをご覧ください。
現在、この拡張機能は、同じ VPC ネットワーク内の 2 つの Cloud SQL プライベート IP インスタンス、または同じインスタンス内のクロス データベースに対して機能します。
同じインスタンス内のデータベースに接続する場合、ホストを localhost または 127.0.0.1
には設定できません。代わりに、Google Cloud Console のインスタンスに表示される IP アドレスを使用する必要があります。
また、Google Cloud Console では、外部データが保存されているインスタンスに対して [SSL 接続のみ許可] ボタンは選択できません。cloudsqlsuperuser
のみが postgres_fdw 外部データラッパーのオーナーになることができます。
postgresql-hll
この拡張機能は、新しいデータ型 hll
を導入します。HyperLogLog データ構造です。バージョン固有の詳細については、ドキュメントをご覧ください。