> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-86180b7b.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# クイックスタート

> NVMe による高性能な Postgres を体験し、ネイティブな ClickHouse 連携でリアルタイム分析を追加できます

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <Icon />
                <span>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Beta feature. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Learn more.
                    </a>
                </u>
            </span>
        </div>;
};

<div id="quickstart-for-managed-postgres">
  # Managed Postgres のクイックスタート
</div>

ClickHouse Managed Postgres は、NVMe ストレージを採用したエンタープライズ向けの Postgres で、EBS のようなネットワーク接続型ストレージと比べて、ディスク I/O がボトルネックになるワークロードで最大 10 倍高速なパフォーマンスを発揮します。このクイックスタートは次の 2 部構成です。

* **第1部:** NVMe Postgres を使い始め、そのパフォーマンスを体験する
* **第2部:** ClickHouse と統合してリアルタイム分析を実現する

Managed Postgres は現在 AWS の複数のリージョンで利用でき、プライベートプレビュー期間中は無料です。

**このクイックスタートで行うこと:**

* NVMe による高性能を備えた Managed Postgres インスタンスを作成する
* 100 万件のサンプルイベントをロードし、NVMe の速度を実際に確認する
* クエリを実行し、低レイテンシのパフォーマンスを体感する
* リアルタイム分析のためにデータを ClickHouse にレプリケートする
* `pg_clickhouse` を使用して Postgres から ClickHouse に直接クエリを実行する

<div id="part-1">
  ## 第1部: NVMe Postgres を始める
</div>

<div id="create-postgres-database">
  ### データベースを作成する
</div>

新しいManaged Postgres サービスを作成するには、Cloud Console のサービス一覧で **New service** ボタンをクリックします。続いて、データベースの種類として Postgres を選択します。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/create-service.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=e1392d23973413b320a50f2796114212" alt="Managed Postgres サービスの作成" size="md" border width="1666" height="1634" data-path="images/managed-postgres/create-service.png" />

データベースインスタンスの名前を入力し、**Create service** をクリックします。すると、概要ページが表示されます。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/overview.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=1e544f5585c1da8dc7d865d6ee80a476" alt="Managed Postgres の概要" size="md" border width="3680" height="2324" data-path="images/managed-postgres/overview.png" />

Managed Postgres インスタンスのプロビジョニングが行われ、3〜5 分で使用可能になります。

<div id="connect">
  ### データベースに接続する
</div>

左側のサイドバーに [**Connect** ボタン](/ja/products/managed-postgres/connection) があります。これをクリックすると、接続情報と複数のフォーマットの接続文字列を確認できます。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/connect-modal.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=d1cc63504c69b4bc0534dbcef3ce97ca" alt="Managed Postgres の接続モーダル" size="md" border width="1910" height="1728" data-path="images/managed-postgres/connect-modal.png" />

`psql` の接続文字列をコピーして、データベースに接続します。DBeaver などの Postgres 互換クライアントや、各種アプリケーションライブラリも使用できます。

<div id="nvme-performance">
  ### NVMe のパフォーマンスを体感する
</div>

NVMe によるパフォーマンスを実際に確認してみましょう。まず、クエリの実行時間を測定できるよう、psql でタイミング計測を有効にします。

```sql theme={null}
\timing
```

イベント用とユーザー用のサンプルテーブルを2つ作成します。

```sql theme={null}
CREATE TABLE events (
   event_id SERIAL PRIMARY KEY,
   event_name VARCHAR(255) NOT NULL,
   event_type VARCHAR(100),
   event_timestamp TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
   event_data JSONB,
   user_id INT,
   user_ip INET,
   is_active BOOLEAN DEFAULT TRUE,
   created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
   updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE users (
   user_id SERIAL PRIMARY KEY,
   name VARCHAR(100),
   country VARCHAR(50),
   platform VARCHAR(50)
);
```

それでは、100万件のイベントを挿入して、NVMeの速度を見てみましょう：

```sql theme={null}
INSERT INTO events (event_name, event_type, event_timestamp, event_data, user_id, user_ip)
SELECT
   'Event ' || gs::text AS event_name,
   CASE
       WHEN random() < 0.5 THEN 'click'
       WHEN random() < 0.75 THEN 'view'
       WHEN random() < 0.9 THEN 'purchase'
       WHEN random() < 0.98 THEN 'signup'
       ELSE 'logout'
   END AS event_type,
   NOW() - INTERVAL '1 day' * (gs % 365) AS event_timestamp,
   jsonb_build_object('key', 'value' || gs::text, 'additional_info', 'info_' || (gs % 100)::text) AS event_data,
   GREATEST(1, LEAST(1000, FLOOR(POWER(random(), 2) * 1000) + 1)) AS user_id,
   ('192.168.1.' || ((gs % 254) + 1))::inet AS user_ip
FROM
   generate_series(1, 1000000) gs;
```

```text theme={null}
INSERT 0 1000000
Time: 3596.542 ms (00:03.597)
```

<Tip>
  **NVMe パフォーマンス**

  JSONB データを含む 100 万行を 4 秒未満で挿入。EBS のようなネットワーク接続型ストレージを使用する従来のクラウドデータベースでは、ネットワーク往復遅延と IOPS のスロットリングにより、同じ操作に通常 2〜3 倍の時間がかかります。NVMeストレージは、ストレージをコンピュートに物理的に直結することで、こうしたボトルネックを解消します。

  パフォーマンスは、インスタンスサイズ、現在の負荷、データ特性によって異なります。
</Tip>

1,000 人のユーザーを挿入します:

```sql theme={null}
INSERT INTO users (name, country, platform)
SELECT
    first_names[first_idx] || ' ' || last_names[last_idx] AS name,
    CASE
        WHEN random() < 0.25 THEN 'India'
        WHEN random() < 0.5 THEN 'USA'
        WHEN random() < 0.7 THEN 'Germany'
        WHEN random() < 0.85 THEN 'China'
        ELSE 'Other'
    END AS country,
    CASE
        WHEN random() < 0.2 THEN 'iOS'
        WHEN random() < 0.4 THEN 'Android'
        WHEN random() < 0.6 THEN 'Web'
        WHEN random() < 0.75 THEN 'Windows'
        WHEN random() < 0.9 THEN 'MacOS'
        ELSE 'Linux'
    END AS platform
FROM
    generate_series(1, 1000) AS seq
    CROSS JOIN LATERAL (
        SELECT
            array['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Hank', 'Ivy', 'Jack', 'Liam', 'Olivia', 'Noah', 'Emma', 'Sophia', 'Benjamin', 'Isabella', 'Lucas', 'Mia', 'Amelia', 'Aarav', 'Riya', 'Arjun', 'Ananya', 'Wei', 'Li', 'Huan', 'Mei', 'Hans', 'Klaus', 'Greta', 'Sofia'] AS first_names,
            array['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Martinez', 'Taylor', 'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Moore', 'Lee', 'Perez', 'Sharma', 'Patel', 'Gupta', 'Reddy', 'Zhang', 'Wang', 'Chen', 'Liu', 'Schmidt', 'Müller', 'Weber', 'Fischer'] AS last_names,
            1 + (seq % 32) AS first_idx,
            1 + ((seq / 32)::int % 32) AS last_idx
    ) AS names;
```

<div id="run-queries">
  ### データに対してクエリを実行する
</div>

それでは、NVMeストレージで Postgres がどれほど高速に応答するかを確認するために、いくつかのクエリを実行してみましょう。

**100 万件のイベントを種類別に集計:**

```sql theme={null}
SELECT event_type, COUNT(*) as count 
FROM events 
GROUP BY event_type 
ORDER BY count DESC;
```

```text theme={null}
 event_type | count  
------------+--------
 click      | 499523
 view       | 375644
 purchase   | 112473
 signup     |  12117
 logout     |    243
(5 rows)

Time: 114.883 ms
```

**JSONB フィルタリングと日付範囲を使ったクエリ:**

```sql theme={null}
SELECT COUNT(*) 
FROM events 
WHERE event_timestamp > NOW() - INTERVAL '30 days'
  AND event_data->>'additional_info' LIKE 'info_5%';
```

```text theme={null}
 count 
-------
  9042
(1 row)

Time: 109.294 ms
```

**イベントをユーザー情報と結合する:**

```sql theme={null}
SELECT u.country, COUNT(*) as events, AVG(LENGTH(e.event_data::text))::int as avg_json_size
FROM events e
JOIN users u ON e.user_id = u.user_id
GROUP BY u.country
ORDER BY events DESC;
```

```text theme={null}
 country | events | avg_json_size 
---------+--------+---------------
 USA     | 383748 |            52
 India   | 255990 |            52
 Germany | 223781 |            52
 China   | 127754 |            52
 Other   |   8727 |            52
(5 rows)

Time: 224.670 ms
```

<Info>
  **Postgres の準備ができました**

  これで、トランザクション処理のワークロードに対応できる、完全に機能する高性能な Postgres データベースを利用できます。

  第2部 に進み、ClickHouse のネイティブ連携によって分析機能をどのように大幅に強化できるかをご確認ください。
</Info>

***

<div id="part-2">
  ## 第2部: ClickHouse でリアルタイム分析を追加する
</div>

Postgres はトランザクションワークロード (OLTP) に優れる一方、ClickHouse は大規模なデータセットに対する分析クエリ (OLAP) 向けに特化して設計されています。この 2 つを組み合わせることで、両方の長所を活かせます。

* アプリケーションのトランザクションデータ (挿入、更新、ポイントルックアップ) には **Postgres**
* 数十億行規模のデータに対するサブ秒レベルの分析には **ClickHouse**

このセクションでは、Postgres のデータを ClickHouse にレプリケートし、それをシームレスにクエリする方法を紹介します。

<div id="setup-integrate-clickhouse">
  ### ClickHouse 連携の設定
</div>

Postgres にテーブルとデータが入ったので、次は分析のためにそれらのテーブルを ClickHouse にレプリケートします。まず、サイドバーで **ClickHouse 連携** をクリックします。次に **Replicate data in ClickHouse** をクリックします。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/integration-landing.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=86816b8713f752b12f37c627f0839471" alt="Managed Postgres インテグレーション（空の状態）" size="md" border width="3448" height="1982" data-path="images/managed-postgres/integration-landing.png" />

続いて表示されるフォームで、インテグレーション名を入力し、レプリケート先の既存の ClickHouse インスタンスを選択できます。まだ ClickHouse インスタンスがない場合は、このフォームから直接作成できます。

<Info>
  **重要**

  先に進む前に、選択した ClickHouse サービスが Running になっていることを確認してください。
</Info>

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/postgres-analytics-form.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=532051daa8fa9891ff41cde37a68d68b" alt="Managed Postgres インテグレーションフォーム" size="md" border width="3400" height="1976" data-path="images/managed-postgres/postgres-analytics-form.png" />

**Next** をクリックすると、テーブルピッカーに移動します。ここで行うことは次のとおりです。

* レプリケート先の ClickHouse データベースを選択します。
* **public** スキーマを展開し、先ほど作成した users テーブルと events テーブルを選択します。
* **Replicate data to ClickHouse** をクリックします。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/table-picker.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=a80909f941dca036f83dc003e8030329" alt="Managed Postgres テーブルピッカー" size="md" border width="3400" height="1976" data-path="images/managed-postgres/table-picker.png" />

レプリケーションが開始され、インテグレーションの概要ページに移動します。初めてのインテグレーションであるため、初期インフラストラクチャのセットアップには 2〜3 分かかることがあります。その間に、新しい **pg\_clickhouse** 拡張機能を見てみましょう。

<div id="pg-clickhouse-extension">
  ### Postgres から ClickHouse をクエリする
</div>

`pg_clickhouse` 拡張機能を使うと、標準 SQL で Postgres から ClickHouse のデータを直接クエリできます。つまり、アプリケーションは Postgres を、トランザクションデータと分析データの両方に対応する統一的なクエリレイヤーとして利用できます。詳細は、[完全なドキュメント](/ja/integrations/connectors/tools/pg_clickhouse/introduction)を参照してください。

拡張機能を有効にします:

```sql theme={null}
CREATE EXTENSION pg_clickhouse;
```

次に、ClickHouse への foreign server 接続を作成します。セキュアな接続には、ポート `8443` の `http` ドライバーを使用します。

```sql theme={null}
CREATE SERVER ch FOREIGN DATA WRAPPER clickhouse_fdw
       OPTIONS(driver 'http', host '<clickhouse_cloud_host>', dbname '<database_name>', port '8443');
```

`<clickhouse_cloud_host>` は ClickHouse のホスト名に、`<database_name>` はレプリケーションの設定時に選択したデータベース名に置き換えてください。ホスト名は、サイドバーの **Connect** をクリックすると ClickHouse サービス で確認できます。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/get-clickhouse-host.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=27b33cd58d5e889169a7a5908a6a7d3a" alt="ClickHouse ホストを取得" size="md" border width="695" height="765" data-path="images/managed-postgres/get-clickhouse-host.png" />

次に、Postgres ユーザーを ClickHouse サービス の認証情報に対応付けます。

```sql theme={null}
CREATE USER MAPPING FOR CURRENT_USER SERVER ch 
OPTIONS (user 'default', password '<clickhouse_password>');
```

次に、ClickHouseのテーブルをPostgresのスキーマにインポートします。

```sql theme={null}
CREATE SCHEMA organization;
IMPORT FOREIGN SCHEMA "<database_name>" FROM SERVER ch INTO organization;
```

`<database_name>` は、サーバーの作成時に指定したものと同じデータベース名に置き換えてください。

これで、Postgres クライアントですべての ClickHouse テーブルを参照できます。

```sql theme={null}
\det+ organization.*
```

<div id="analytics-after-integration">
  ### 分析データが反映されていることを確認する
</div>

インテグレーションのページに戻って確認しましょう。初回のレプリケーションが完了しているはずです。詳細を表示するには、インテグレーション名をクリックします。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/Dg8bFH66g3B16Coa/images/managed-postgres/analytics-list.png?fit=max&auto=format&n=Dg8bFH66g3B16Coa&q=85&s=ccdcbacd290d504e62d807b51633278c" alt="Managed Postgres の分析一覧" size="md" border width="1821" height="319" data-path="images/managed-postgres/analytics-list.png" />

サービス名をクリックして ClickHouse Console を開き、レプリケートテーブルを確認します。

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-86180b7b/9xTJOrjv25uK7bmy/images/managed-postgres/replicated-tables.png?fit=max&auto=format&n=9xTJOrjv25uK7bmy&q=85&s=f2baf60d2b6eee106d4567885c1bb4de" alt="ClickHouse 内の Managed Postgres のレプリケートテーブル" size="md" border width="1725" height="1179" data-path="images/managed-postgres/replicated-tables.png" />

<div id="performance-comparison">
  ### Postgres と ClickHouse のパフォーマンスを比較する
</div>

それでは、いくつかの分析クエリを実行して、Postgres と ClickHouse のパフォーマンスを比較してみましょう。レプリケートテーブルでは、`public_<table_name>` という命名規則が使われる点に注意してください。

**クエリ 1: アクティビティ別の上位ユーザー**

このクエリは、複数の集計を使って最もアクティブなユーザーを抽出します。

```sql theme={null}
-- ClickHouse経由
SELECT 
    user_id,
    COUNT(*) as total_events,
    COUNT(DISTINCT event_type) as unique_event_types,
    SUM(CASE WHEN event_type = 'purchase' THEN 1 ELSE 0 END) as purchases,
    MIN(event_timestamp) as first_event,
    MAX(event_timestamp) as last_event
FROM organization.public_events
GROUP BY user_id
ORDER BY total_events DESC
LIMIT 10;
```

```text theme={null}
 user_id | total_events | unique_event_types | purchases |        first_event         |         last_event         
---------+--------------+--------------------+-----------+----------------------------+----------------------------
       1 |        31439 |                  5 |      3551 | 2025-01-22 22:40:45.612281 | 2026-01-21 22:40:45.612281
       2 |        13235 |                  4 |      1492 | 2025-01-22 22:40:45.612281 | 2026-01-21 22:40:45.612281
...
(10 rows)

Time: 163.898 ms   -- ClickHouse
Time: 554.621 ms   -- Postgresで同じクエリを実行した場合
```

**クエリ 2: 国別およびプラットフォーム別のユーザーエンゲージメント**

このクエリでは、events と users を結合し、エンゲージメントのメトリクスを算出します:

```sql theme={null}
-- ClickHouse経由
SELECT 
    u.country,
    u.platform,
    COUNT(DISTINCT e.user_id) as users,
    COUNT(*) as total_events,
    ROUND(COUNT(*)::numeric / COUNT(DISTINCT e.user_id), 2) as events_per_user,
    SUM(CASE WHEN e.event_type = 'purchase' THEN 1 ELSE 0 END) as purchases
FROM organization.public_events e
JOIN organization.public_users u ON e.user_id = u.user_id
GROUP BY u.country, u.platform
ORDER BY total_events DESC
LIMIT 10;
```

```text theme={null}
 country | platform | users | total_events | events_per_user | purchases 
---------+----------+-------+--------------+-----------------+-----------
 USA     | Android  |   115 |       109977 |             956 |     12388
 USA     | Web      |   108 |       105057 |             972 |     11847
 USA     | iOS      |    83 |        84594 |            1019 |      9565
 Germany | Android  |    85 |        77966 |             917 |      8852
 India   | Android  |    80 |        68095 |             851 |      7724
...
(10 rows)

Time: 170.353 ms   -- ClickHouse
Time: 1245.560 ms  -- Postgresで同じクエリを実行した場合
```

**パフォーマンス比較:**

| Query                    | Postgres (NVMe) | ClickHouse (via pg\_clickhouse) | Speedup |
| ------------------------ | --------------- | ------------------------------- | ------- |
| 上位ユーザー (5つの集計)           | 555 ms          | 164 ms                          | 3.4x    |
| ユーザーエンゲージメント (JOIN + 集計) | 1,246 ms        | 170 ms                          | 7.3x    |

<Tip>
  **ClickHouseを使うべきケース**

  この100万行のデータセットでも、ClickHouseはJOINや複数の集計を含む複雑な分析クエリで3〜7倍高速です。規模がさらに大きくなると (1億行以上) 、その差はより顕著になり、ClickHouseの列指向ストレージとベクトル化実行によって10〜100倍の高速化が期待できます。

  クエリ時間は、インスタンスのサイズ、サービス間のネットワークレイテンシ、データの特性、現在の負荷によって変動します。
</Tip>

<div id="cleanup">
  ## クリーンアップ
</div>

このクイックスタートで作成したリソースを削除するには、次の手順を実行します。

1. まず、ClickHouseサービスから ClickPipe インテグレーションを削除します
2. 次に、Cloud Console から Managed Postgres インスタンスを削除します
