Working with SQL and the PGD Cluster#

PGDクラスターを使用する最初のステップは、 SQLを使用して接続することです。これは、 psql コマンドラインインターフェイスまたはPostgreSQLをサポートする他のSQLクライアントを使用して実行できます。

クイックスタートキットのDocker Composeセットアップを使用している場合、 psql コマンドは既にインストールされ構成されています。つまり、ホストの1つでシェルを取得するだけで作業が開始できます。 host-1 コンテナにサインインして、クラスター内でコマンドを実行できます。

docker compose exec host-1 bash

これにより、 host-1 コンテナ内にシェルが提供され、 PGDクラスターに対してPGDおよびSQLコマンドを実行できます。

PGDクラスター内の接続#

PGD Essentialでは、メンテナンスタスクを実行する場合を除き、通常、クラスター内のすべてのホストのTCPポート6432で実行されている接続マネージャーを使用してクラスターに接続します。

次のコマンドを使用して、クラスター内の書き込みリーダーノードに接続できます。

psql -h <host> -p 6432 -U <username> <database>

ユーザーなしで実行されている新しいクラスターはpostgres スーパーユーザーを除き 、1つのレプリケートデータベースpgddb があるため、次のコマンドを使用してクラスターに接続できます。

psql -h host-1 -p 6432 -U postgres pgddb

これは、ポート6432のhost-1 コンテナで実行されている接続マネージャーに接続し、クラスター内の書き込みリーダーノードにルーティングされます。 host-1 は、クラスター内のホストの名前に置き換えることができます。それらはすべて接続マネージャーを実行します。

次のコマンドを実行すると、クラスター内のどのノードに接続しているかを確認できます。

select node_name from bdr.local_node_summary;
__OUTPUT__
 node_name
- ----------
 node-1

クラスター内でnode-1 ノードを実行しているhost-1 コンテナに接続したため、これは驚くべきことではありません。

psql を終了し、次のように再接続すると

psql -h host-2 -p 6432 -U postgres pgddb

クラスター内のnode-1 ノードに接続していることがわかります。

select node_name from bdr.local_node_summary;
 node_name
- ----------
 node-1

これは、クラスター内の書き込みリーダーノードnode-1 にルーティングする接続マネージャーです。これを確認するには、次のことを実行できます。

\! pgd group group-1 show --summary
__OUTPUT__
 Group Property    | Value
- ------------------+---------
 Group Name        | group-1
 Parent Group Name | pgd
 Group Type        | data
 Write Leader      | node-1
 Commit Scope      |

psql の\! コマンドを使用して、psql セッション内からシェルコマンドを直接実行できます。

SQLでの作業#

クラスターに接続したので、 SQLコマンドでの作業を開始できます。通常のPostgreSQLデータベースを使用するのと同じように、テーブルを作成し、データを挿入し、クエリを実行できます。

たとえば、テーブルを作成し、いくつかのデータを挿入できます。

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE
);
INSERT INTO users (name, email) VALUES
(Alice, alice@example.com),
(Bob, bob@example.com);

次に、データを照会できます。

SELECT * FROM users;
__OUTPUT__
 id |  name  |        email
- ---+--------+---------------------
  2 | Alice  |      alice@example.com
  3 | Bob    |      bob@example.com
(2 rows)

より複雑なクエリーを実行し、テーブルを結合し、PostgreSQLのすべての機能を使用することもできます。すべてのSQLコマンドをカバーすることはこのガイドの範囲内ではありませんが、 SQL構文とコマンドの詳細については、 PostgreSQL documentation を参照してください。

PGDとの違い#

重要なのは、これらのSQLコマンドがクラスター全体でレプリケートされることです。 PGDがレプリケーションを処理します。たとえば、そのserial キーはクラスター全体でグローバル一意キーに自動的に変換されているため、クラスター内の任意のノードにデータを挿入でき、それは他のすべてのノードにレプリケートされます。 PGD Essentialの場合、書き込みリーダーに接続する必要があるため、これはそれほど重要ではありませんが、 PGD Expandedでは、クラスター内の任意のノードに接続してSQLコマンドを実行できます。この自動変更により、サービスを心配せずにそれを行うことができます。競合または重複。 PGD Essentialを使用すると、将来も対応でき、 SQLコマンドやアプリケーションコードを変更せずに、後で簡単にPGD Expandedに移行できます。

次のステップ#

PGDクラスターに接続し、いくつかのSQLコマンドを実行したため、次のトピックを探索できます。