ClickHouse OpenAPI を使用すると、
ClickHouse サービスと同様に Managed Postgres サービスをプログラムから
操作できます。同じ API では、サービスのメトリクスをスクレイピングするための
[Prometheus エンドポイント] も公開されています。
すでに OpenAPI に慣れている場合は、[API キー] を取得して
Managed Postgres API リファレンス に直接進んでください。
そうでない場合は、このまま簡単な概要をご確認ください。
ClickHouse OpenAPI を使用するには認証が必要です。作成方法については
API keys を参照してください。次に、以下のように Basic 認証の認証情報として使用します。
KEY_ID=mykeyid
KEY_SECRET=mykeysecret
curl -s --user "$KEY_ID:$KEY_SECRET" https://api.clickhouse.cloud/v1/organizations | jq
次に、Organization ID が必要になります。
- コンソールの左下で組織名を選択します。
- Organization details を選択します。
- Organization ID の右側にあるコピーアイコンをクリックして、
直接クリップボードにコピーします。
Postgres サービス のライフサイクルを見ていきましょう。
まず、create API を使って新しく作成します。このリクエストでは、JSONボディに次のプロパティを含める必要があります。
name: 新しいPostgres サービスの名前
provider: クラウドプロバイダーの名前
region: serviceをデプロイするproviderのネットワーク内のRegion
size: VMのサイズ
storageSize: VMのストレージサイズ
これらのプロパティの設定可能な値については、create API のドキュメントを参照してください。さらに、デフォルトの17ではなく、Postgres 18を指定します。
create_data='{
"name": "my postgres",
"provider": "aws",
"region": "us-west-2",
"postgresVersion": "18",
"size": "r8gd.large",
"storageSize": 118
}'
次に、このデータを使用して新しいインスタンスを作成します。なお、そのためにはContent-Typeヘッダーの内容が必要です:
curl -s --user "$KEY_ID:$KEY_SECRET" -H 'Content-Type: application/json' \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres" \
-d "$create_data" | jq
成功すると、新しいインスタンスが作成され、その情報
(接続情報を含む) が返されます:
{
"result": {
"id": "pg7myrd1j06p3gx4zrm2ze8qz6",
"name": "my postgres",
"provider": "aws",
"region": "us-west-2",
"postgresVersion": "18",
"size": "r8gd.large",
"storageSize": 118,
"haType": "none",
"tags": [],
"connectionString": "postgres://postgres:vV6cfEr2p_-TzkCDrZOx@my-postgres-6d8d2e3e.pg7myrd1j06p3gx4zrm2ze8qz6.c0.us-west-2.aws.pg.clickhouse-dev.com:5432/postgres?channel_binding=require",
"username": "postgres",
"password": "vV6cfEr2p_-TzkCDrZOx",
"hostname": "my-postgres-6d8d2e3e.pg7myrd1j06p3gx4zrm2ze8qz6.c0.us-west-2.aws.pg.clickhouse-dev.com",
"isPrimary": true,
"state": "creating"
},
"requestId": "a5957990-dbe5-46fd-b5ce-a7f8f79e50fe",
"status": 200
}
レスポンスのidを使って、サービスを再度取得します:
PG_ID=pg7myrd1j06p3gx4zrm2ze8qz6
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq
出力は作成時に返されるJSONと似ていますが、state を確認して
ください。これが running に変わったら、サーバーの準備完了です。
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq .result.state
これで、connectionString プロパティを使って、たとえば
psql 経由で接続できます:
$ psql "$(
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq -r .result.connectionString
)"
psql (18.3)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: postgresql)
Type "help" for help.
postgres=#
psql を終了するには、\q と入力します。
patch API は、RFC 7396 の JSON Merge Patch を使用して、Managed
Postgresサービスのプロパティの一部を更新できます。複雑なデプロイメントでは、タグが特に重要になることがあります。その場合は、リクエストでタグだけを送信してください:
curl -sX PATCH --user "$KEY_ID:$KEY_SECRET" -H 'Content-Type: application/json' \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
-d '{"tags": [{"key": "Environment", "value": "production"}]}' \
| jq .result
返却されるデータには、新しいタグが含まれているはずです:
{
"id": "$PG_ID",
"name": "my postgres",
"provider": "aws",
"region": "us-west-2",
"postgresVersion": "18",
"size": "r8gd.large",
"storageSize": 118,
"haType": "none",
"tags": [
{
"key": "Environment",
"value": "production"
}
],
"connectionString": "postgres://postgres:vV6cfEr2p_-TzkCDrZOx@my-postgres-6d8d2e3e.$PG_ID.c0.us-west-2.aws.pg.clickhouse-dev.com:5432/postgres?channel_binding=require",
"username": "postgres",
"password": "vV6cfEr2p_-TzkCDrZOx",
"hostname": "my-postgres-6d8d2e3e.$PG_ID.c0.us-west-2.aws.pg.clickhouse-dev.com",
"isPrimary": true,
"state": "running"
}
Postgres サービスを削除するには、delete API を使用します。
Postgres サービスを削除すると、サービス自体とその中のすべての
データが完全に削除されます。サービスを削除する前に、必ずバックアップを
取得するか、レプリカをプライマリに昇格させてください。
curl -sX DELETE --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID" \
| jq
成功した場合、レスポンスではステータスコード 200 が返されます。例:
{
"requestId": "ac9bbffa-e370-410c-8bdd-bd24bf3d7f82",
"status": 200
}
Prometheus 互換のエンドポイントが 2 つあり、Managed Postgres サービスの CPU、メモリ、I/O、接続、
およびトランザクションのメトリクスを公開しています。1 つは組織内のすべてのサービスの
メトリクスを返し、もう 1 つは単一のサービスのメトリクスを返します。設定については
[Prometheus エンドポイント] ページを、メトリクスの一覧については
[メトリクス リファレンス] を参照してください。
Cloud
Console の [クエリインサイト] タブの各ステートメントのテレメトリーは、プログラムからも利用できます。2 つのエンドポイントにより、サービス上の最も遅い
クエリパターンを取得できます。1 つは影響度順にすべてのパターンを一覧表示し、もう 1 つは単一のパターンとその最近の実行結果を返します。
[スローパターン API] は、一定の時間範囲内で観測された最も遅いクエリ
パターンの集約メトリクスを返します。時間範囲の指定は必須です。
RFC 3339 形式のタイムスタンプとして from_date と to_date を渡してください:
FROM=2026-05-25T00:00:00Z
TO=2026-05-26T00:00:00Z
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID/slowQueryPatterns?from_date=$FROM&to_date=$TO" \
| jq
結果はデフォルトで、total_duration の
降順で、最もコストの高いパターンから返されます。sort_by を使うと別の指標 (たとえば
p99_duration、call_count、または total_wal_bytes) でソートでき、sort_order
で並び順を反転できます。db_name、db_user、
db_operation、および app フィルターで対象を絞り込み、limit と
offset でページ送りできます。
各結果は 1 つの正規化されたパターンで、リテラルは取り除かれ、
実行時間はマイクロ秒単位で示されます:
{
"result": [
{
"queryId": "-4748036479882663975",
"queryText": "SELECT * FROM orders WHERE customer_id = $1 ORDER BY created_at DESC LIMIT $2",
"dbName": "sales",
"dbUser": "orders_service",
"dbOperation": "SELECT",
"app": "orders-api",
"callCount": 84213,
"errorCount": 0,
"totalDurationUs": 1012384556,
"avgDurationUs": 12021,
"maxDurationUs": 482915,
"p50DurationUs": 9874,
"p95DurationUs": 28431,
"p99DurationUs": 41200,
"totalRows": 842130,
"totalSharedBlksRead": 19284,
"totalSharedBlksHit": 48217734,
"totalCpuTimeUs": 938472113,
"totalWalBytes": 0
}
],
"requestId": "c128d830-5769-4c82-8235-f79aa69d1ebf",
"status": 200
}
queryId は正規化されたステートメントの符号付き 64 ビットハッシュなので、しばしば
負の値になります。単一のパターンを取得するには、先頭の - も含めて
その値をそのまま渡してください。
リストレスポンスの queryId を [低速クエリパターン API] に渡すと、その
パターンの集計メトリクスと、直近の個別実行結果を取得できます。
パターンの識別に必要な db_name、db_user、db_operation は
必須です。
QUERY_ID=-4748036479882663975
curl -s --user "$KEY_ID:$KEY_SECRET" \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/postgres/$PG_ID/slowQueryPatterns/$QUERY_ID?db_name=sales&db_user=orders_service&db_operation=SELECT" \
| jq
レスポンスには、aggregate の下にあるリストエンドポイントと同じ集計に加えて、
recentExecutions 配列が含まれます。各実行には、実行ごとの
完全なカウンター — shared および temp block の I/O、CPU の user および system
time、並列 worker 数、JIT、WAL — が含まれます。これらは、
コンソールの
detail flyout で内訳が表示されるものと同じカウンターです。
{
"result": {
"aggregate": {
"queryId": "-4748036479882663975",
"queryText": "SELECT * FROM orders WHERE customer_id = $1 ORDER BY created_at DESC LIMIT $2",
"dbName": "sales",
"dbUser": "orders_service",
"dbOperation": "SELECT",
"callCount": 84213,
"avgDurationUs": 12021,
"p99DurationUs": 41200
},
"recentExecutions": [
{
"timestamp": "2026-05-25T16:42:09Z",
"durationUs": 41200,
"rows": 10,
"sharedBlksHit": 412,
"sharedBlksRead": 3,
"tempBlksWritten": 0,
"cpuUserTimeUs": 38211,
"cpuSysTimeUs": 1044,
"parallelWorkersPlanned": 0,
"parallelWorkersLaunched": 0,
"walBytes": 0,
"serverRole": "primary"
}
]
},
"requestId": "a5957990-dbe5-46fd-b5ce-a7f8f79e50fe",
"status": 200
}
この例では簡潔にするため、両方のオブジェクトを一部省略しています。API は
per-execution counters で説明している完全なカウンター セットを返します。