Spanner 向け PostgreSQL Interface

このページでは、Spanner とそのコンポーネントの PostgreSQL Interface について説明します。PostgreSQL と GoogleSQL の選択に関するガイダンスと、PostgreSQL Interface を導入して使用するためのベスト プラクティスについて説明します。

PostgreSQL Interface を使用すると、Spanner の機能(フルマネージド、無制限のスケーリング、強整合性、高パフォーマンス、最大 99.999% のグローバル可用性)がオープンソースの PostgreSQL エコシステムから利用できるようなります。PostgreSQL SQL 言語のコア サブセット、psql コマンドライン ツールのサポート、ネイティブ言語のクライアント、Dataflow などの既存の Google ツールとの統合が含まれています。実際の PostgreSQL データベース・インスタンスを管理するほかのサービスとは異なり、Spanner は PostgreSQL 互換の構文を使用して既存のスケールアウト機能を提供し、これにより、デベロッパーにとっての使いやすさとアプリケーションのポータビリティは確保されますが、PostgreSQL と完全な互換性はありません。ストアド プロシージャ、トリガー、拡張機能、構成可能な隔離レベルなど、PostgreSQL の機能に依存する既存のアプリケーションでは、Spanner で実行する再作業が必要になります。ただし、Spanner がサポートする SQL 構文はセマンティックに同等な PostgreSQL であるため、PostgreSQL Interface に対して作成されたスキーマとクエリを別の PostgreSQL 環境に簡単に移行できます。

PostgreSQL Interface は、クエリ、関数、演算子など、一般的な PostgreSQL SQL 構文をサポートしています。さらに、多くのデータ型、DDL 構文、情報スキーマビューがサポートされています。アプリケーションは、ネイティブの Spanner クライアントや PGAdapter(オープン PostgreSQL ワイヤ プロトコルを実装する軽量プロキシ)を使用して、PostgreSQL Interface 対応の Spanner データベースに接続できます。当初、ワイヤ プロトコルのサポートは、PSQL コマンドライン ツールとの使用を対象としています。

管理者は、gcloud CLI など、Spanner の既存のコンソール、API、ツールを使用して、PostgreSQL インターフェース対応データベースのプロビジョニング、管理、モニタリングを行います。PostgreSQL Interface は、データベースごとに、その作成時に構成されます。Spanner インスタンスには、GoogleSQL と PostgreSQL Interface の言語データベースの両方を含めることができます。それらは同じ基本的な分散データベース エンジンを共有しているため、両方のデータベース言語については、スケーラビリティ、整合性、パフォーマンス、セキュリティ特性は同じです。

PostgreSQL Interface のコンポーネント

PostgreSQL Interface は、2 つの主要な機能(PostgreSQL の SQL 言語のサポートと、PostgreSQL Interface 対応データベースに接続するクライアントのサポート)から構成されています。

PostgreSQL の SQL 言語のサポート

PostgreSQL Interface は、DQL、DML、DDL などの PostgreSQL SQL 言語のサブセットを提供し、インターリーブされたテーブルやクエリ ヒンティングなどの Spanner 機能をサポートする拡張機能を提供します。Spanner の PostgreSQL 言語サポートの詳細については、Spanner の PostgreSQL 言語をご覧ください。

PostgreSQL クライアントのサポート

デベロッパーは、Java、Go、Python、Node.js、Ruby、PHP、C#、C++ の環境用のオープンソース Spanner クライアントを使用して、アプリケーションを PostgreSQL インターフェース データベースに接続できます。オープンソースの Spanner JDBC ドライバGo の database/sql パッケージ用ドライバを使用することもできます。

PostgreSQL インターフェースは、psql コマンドライン ツールもサポートしています。psql は、クエリの実行、メタデータの確認、データの読み込みのための対話型環境であり、多くの PostgreSQL 環境で一般的です。psql のサポートは、PostgreSQL ワイヤ プロトコルを Spanner の組み込み gRPC インターフェースに変換する軽量のプロキシである PGAdapter によって有効になり、接続と IAM 認証を管理します。詳細については、PGAdapter の概要をご覧ください。

PostgreSQL JDBC ドライバPostgreSQL pgx ドライバPGAdapter でサポートされています。サポートされている PostgreSQL ドライバの一覧については、PostgreSQL ドライバと ORM をご覧ください。

GoogleSQL と PostgreSQL のいずれかを選択する

Spanner データベースを作成するときに、GoogleSQL 言語か PostgreSQL 言語のいずれかを選択できます。その言語によって、アプリケーションで使用するクエリ型とデータ型の構文とセマンティクス、およびデータベースに接続する方法が決まります。

特定のアプリケーションやプロジェクトで GoogleSQL と PostgreSQL のどちらを使用するかを決めるのは、Spanner の機能における SQL 言語サポートではなく、ビジネスニーズと目標です。SQL 言語の方言は、Spanner の機能に関して同じ特性を共有する同等の関係にあります。

  • どちらも同じ分散ストレージとクエリ処理基盤上に実装されています。そのため、パフォーマンス、スケーラビリティ、整合性、可用性の特性が共有しています。
  • どちらも Spanner の機能を、それぞれの標準言語構造のサブセット(1 つは ANSI 2001、もう 1 つはオープンソースの PostgreSQL デファクト スタンダード)を使用して表現し、インターリーブ テーブルやクエリヒントなどの Spanner の機能をサポートする拡張機能が追加されています。
  • どちらの場合も、Spanner 管理インターフェース(Google Cloud コンソール、gcloud CLI、DevOps クライアント自動化用の Spanner クライアント ライブラリ)を使用します。
  • どちらの場合も、Spanner アプリケーション開発インターフェース(Spanner クライアント ライブラリ、REST、RPC API)を使用します。
  • どちらも Spanner の INFORMATION_SCHEMA システム スキーマおよび SPANNER_SYS システム スキーマを使用して、データベースのメタデータと統計情報をクエリします。

現在の PostgreSQL Interface では、GoogleSQL 言語と PostgreSQL 言語が完全に同等ではありません。ただし、長期的には、特定のアプリケーションやプロジェクトに PostgreSQL と GoogleSQL のどちらを使用するかを次のように決定する必要があります。

  • 開発チームがオープンソースの PostgreSQL エコシステムに慣れているか、組織で PostgreSQL が標準化されているか、標準化を進めている場合は、PostgreSQL を選択してください。

  • 次の場合は、GoogleSQL を選択します。

    • 開発チームが GoogleSQL に精通している場合(過去に Spanner の経験がある、または GoogleSQL もサポートしている BigQuery などの他の Google Cloud データベースを使用している場合など)。
    • 組織が GoogleSQL またはその基盤となる ANSI 2011 標準の使用を標準化している場合。

詳しくは、GoogleSQL と PostgreSQL 間の言語一致をご覧ください。

PostgreSQL Interface の使用に関するベスト プラクティス

PostgreSQL Interface を効果的に使用するには、次のことをおすすめします。

  • Google Cloud コンソールまたは Google Cloud CLI を使用して、Spanner インスタンスに PostgreSQL データベースを作成します。(同じインスタンスに PostgreSQL データベースと GoogleSQL データベースの両方を作成できます)。

  • Spanner クライアント ライブラリを使用して、データベースにアクセスするアプリケーションを接続します。

  • PGAdapter プロキシ経由で psql コマンドライン ツールを使用して、データベースをインタラクティブに操作します。または、Google Cloud コンソールの Spanner Studio ページを使用することもできます。

次のステップ