Spanner 用の PostgreSQL Interface を使用すると、使い慣れた PostgreSQL ツールと構文を使用して、Spanner のフルマネージド、スケーラブル、高可用性のインフラストラクチャを活用できます。このページでは、PostgreSQL Interface の機能と制限事項について説明します。
PostgreSQL Interface の利点
- ポータビリティ: PostgreSQL Interface を使用すると、オープンソースの PostgreSQL と互換性のあるスキーマ、クエリ、クライアントを使用して、Spanner の幅広い機能にアクセスできます。これにより、Spanner で構築されたアプリケーションを別の PostgreSQL 環境に移動することが容易になります。このポータビリティにより、デプロイの柔軟性が向上し、強制退出などの障害復旧シナリオがサポートされます。
- 使いやすさ: PostgreSQL をすでに使用している場合は、多くの同じ PostgreSQL ステートメントとツールを使用して Spanner をすぐに使い始めることができます。データベース ポートフォリオ全体で PostgreSQL を使用すると、特定のプロダクト間の差異が減り、共通のベスト プラクティスが確立されます。
- 妥協のない Spanner: PostgreSQL Interface は Spanner の既存の基盤上に構築されているため、補完的な GoogleSQL エコシステムで利用可能な機能に妥協することなく、Spanner の既存の可用性、整合性、費用対パフォーマンスのメリットをすべて提供します。
Spanner でサポートされていない PostgreSQL の機能
PostgreSQL Interface は、PostgreSQL と互換性のあるスキーマ、データ型、クエリ、クライアントを介して Spanner の機能を提供します。PostgreSQL のすべての機能をサポートしているわけではありません。既存の PostgreSQL アプリケーションを Spanner に移行する場合、Spanner 用の PostgreSQL Interface を使用している場合でも、サポートされていない PostgreSQL 機能や、クエリの最適化や主キーの設計などの動作の違いに対応するために、ある程度の変更が必要になる可能性があります。ただし、移行が完了すると、ワークロードは Spanner の信頼性と独自のマルチモデル機能を利用できるようになります。
次のリストは、サポートされている PostgreSQL 機能とサポートされていない PostgreSQL 機能の詳細を示しています。
- サポートされている PostgreSQL 機能: PostgreSQL インターフェースは、PostgreSQL で最もよく使用される機能の多くをサポートしています。これには、スキーマと型システムのコア部分、一般的なクエリの形状、さまざまな関数と演算子、PostgreSQL のシステム カタログの重要な側面が含まれます。アプリケーションは、Spanner のPostgreSQL ワイヤプロトコル実装を介して接続することで、多くの PostgreSQL クライアントを使用できます。
- PostgreSQL 言語機能の一部はサポートされていません。拡張機能、ユーザー定義データ型、ユーザー定義ストアド プロシージャなどの機能はサポートされていません。完全なリストについては、Spanner の PostgreSQL 言語をご覧ください。PostgreSQL には、オープンソースの PostgreSQL とは動作が異なる機能もあります。詳細については、Spanner の PostgreSQL Interface の既知の問題をご覧ください。
- Spanner と Spanner コントロール プレーン: PostgreSQL Interface を使用するデータベースは、Spanner と Google Cloud のツールを使用して、インスタンスのプロビジョニング、保護、モニタリング、最適化を行います。Spanner は、管理アクティビティ用の pgAdmin などのツールをサポートしていません。
- クライアントとワイヤ プロトコルのサポート: Spanner は、アプリケーションと一緒に実行される軽量プロキシである PGAdapter を使用して、PostgreSQL ワイヤ プロトコルのコア クエリ機能をサポートしています。これにより、多くの Spanner クライアントは、Spanner のグローバル エンドポイントと接続管理、IAM 認証を活用しながら、Spanner PostgreSQL Interface データベースをそのまま使用できます。Google の内部ベンチマークによると、PGAdapter を使用した場合、Spanner の組み込みエンドポイントへの直接接続と比較して、顕著なレイテンシの増加はないことがわかっています。
管理
PostgreSQL Interface は、次の機能を使用して Spanner データベースの管理をサポートします。
- 統合されたエクスペリエンス: Spanner の既存のコンソール、API、Google Cloud CLI などのツールを使用して、PostgreSQL インターフェース対応データベースのプロビジョニング、管理、モニタリングを行います。
- 柔軟な構成: PostgreSQL インターフェースをデータベースごとに作成時に構成します。1 つの Spanner インスタンスには、GoogleSQL インターフェース データベースと PostgreSQL インターフェース データベースの両方を配置できます。
- 共有されるメリット: どちらのデータベース言語も、同じ基盤となる分散データベース エンジンを共有しているため、一貫したスケーラビリティ、整合性、パフォーマンス、セキュリティが保証されます。
機能
Spanner の PostgreSQL Interface には、PostgreSQL エコシステムとの統合を可能にする 2 つの主な機能があります。
PostgreSQL 言語のサポート
Spanner は、データクエリ言語(DQL)、データ操作言語(DML)、データ定義言語(DDL)などの PostgreSQL SQL 言語のサブセットを提供します。また、インターリーブされたテーブル、有効期間(TTL)、クエリヒントなど、Spanner 固有の機能をサポートする拡張機能も含まれています。
サポートされている PostgreSQL 言語要素の詳細については、Spanner の PostgreSQL 言語をご覧ください。PostgreSQL 言語で Spanner の機能を使用する方法については、特定の機能のドキュメントをご覧ください。
PostgreSQL クライアントのサポート
Spanner では、さまざまなクライアントからデータベースに接続できます。
PostgreSQL エコシステム ツール: PostgreSQL JDBC ドライバや PostgreSQL pgx ドライバなどの使い慣れたツールを使用して、アプリケーションを PostgreSQL インターフェース データベースに接続できます。サポートされているドライバ、ORM、ツールの一覧については、PostgreSQL ドライバと ORM をご覧ください。
psql コマンドライン ツール: 一般的な
psql
インタラクティブ環境がサポートされているため、ターミナルから直接クエリの実行、メタデータの探索、データの読み込みを行うことができます。PGAdapter: この軽量プロキシを使用すると、接続管理と認証を簡素化できます。詳細については、 PGAdapter の概要をご覧ください。
Spanner クライアント: Spanner には、さまざまなプログラミング言語(Java、Go、Python、Node.js、Ruby、PHP、C#、C++)用のオープンソースの Spanner クライアントと、Spanner JDBC ドライバ、Go の SQL パッケージ用のドライバが用意されています。Spanner クライアントは、プロキシを使用せずに Spanner のグローバル エンドポイントに直接接続します。ただし、Spanner クライアントは、既存の PostgreSQL クライアント、ORM、ツールとの互換性はありません。
PostgreSQL Interface の使用に関するベスト プラクティス
PostgreSQL Interface を使用する場合は、次のベスト プラクティスに従ってください。
- アプリケーションを接続する: サポートされている PostgreSQL ツールのセットを使用して、効率的な接続を行います。
データベースを操作する: インタラクティブな作業の場合は、次のいずれかを選択します。
- 使い慣れた psql コマンドライン ツール(PGAdapter プロキシを使用)
- Google Cloud コンソールの直感的な Spanner Studio ページ
- IDE(DBeaver、Visual Studio Code、JetBrains、IntelliJ など)
- ローカルマシンで Spanner をエミュレートできる Spanner エミュレータ。これは、開発プロセスとテストプロセスで役立ちます。
次のステップ
- PostgreSQL と GoogleSQL のどちらを選択するかを確認する。
- クイックスタートに沿って、PostgreSQL データベースを作成し、操作する。
- Spanner の PostgreSQL 言語のサポートについて詳細を確認する。
- PGAdapter について学習する。
- PGAdapter GitHub リポジトリについて学習する。
- PostgreSQL Interface の既知の問題