メインコンテンツまでスキップ
メインコンテンツまでスキップ

PostgreSQL テーブルエンジン

The PostgreSQL engine allows SELECT and INSERT queries on data stored on a remote PostgreSQL server.

注記

現在、PostgreSQLバージョン12以上のみがサポートされています。

Replicating or migrating Postgres data with with PeerDB

Postgresテーブルエンジンに加えて、PeerDB by ClickHouseを使用して、PostgresからClickHouseへの継続的なデータパイプラインを設定できます。PeerDBは、PostgresからClickHouseへのデータを変更データキャプチャ(CDC)を使用して複製するために特別に設計されたツールです。

Creating a Table

CREATE TABLE クエリの詳細な説明を参照してください。

テーブル構造は元のPostgreSQLテーブル構造と異なる場合があります:

  • カラム名は元のPostgreSQLテーブルと同じである必要がありますが、これらのカラムの一部のみを使用し、任意の順序で使用することができます。
  • カラムタイプは元のPostgreSQLテーブルのものと異なる場合があります。ClickHouseは値をClickHouseデータ型にキャストしようとします。
  • external_table_functions_use_nulls 設定は、Nullableカラムの扱い方を定義します。デフォルト値:1。0の場合、テーブル関数はNullableカラムを作成せず、nullの代わりにデフォルト値を挿入します。これは、配列内のNULL値にも適用されます。

Engine Parameters

  • host:port — PostgreSQLサーバーアドレス。
  • database — リモートデータベース名。
  • table — リモートテーブル名。
  • user — PostgreSQLユーザー。
  • password — ユーザーパスワード。
  • schema — 非デフォルトテーブルスキーマ。オプション。
  • on_conflict — コンフリクト解決戦略。例:ON CONFLICT DO NOTHING。オプション。ただし、このオプションを追加すると、挿入効率が低下します。

Named collections (バージョン21.11以降で利用可能)は、プロダクション環境での使用を推奨します。以下はその例です:

一部のパラメータはキー値引数として上書きできます:

Implementation Details

PostgreSQL側のSELECTクエリは、読み取り専用のPostgreSQLトランザクション内でCOPY (SELECT ...) TO STDOUTとして実行され、各SELECTクエリの後にコミットされます。

=, !=, >, >=, <, <=, INなどの単純なWHERE句は、PostgreSQLサーバーで実行されます。

すべての結合、集計、ソート、IN [ array ]条件、およびLIMITサンプリング制約は、PostgreSQLへのクエリが終了した後にClickHouse内でのみ実行されます。

PostgreSQL側のINSERTクエリは、PostgreSQLトランザクション内でCOPY "table_name" (field1, field2, ... fieldN) FROM STDINとして実行され、各INSERTステートメントの後に自動コミットが行われます。

PostgreSQLのArrayタイプはClickHouseの配列に変換されます。

注記

注意 - PostgreSQLでは、type_name[]のように作成された配列データは、同じカラムの異なるテーブル行で異なる次元の多次元配列を含むことができます。しかし、ClickHouseでは、同じカラムのすべてのテーブル行で同じ次元数の多次元配列のみが許可されています。

複数のレプリカをサポートしており、|でリストにする必要があります。たとえば:

PostgreSQL辞書ソースのためのレプリカの優先度もサポートされています。地図中の番号が大きいほど、優先度は低くなります。最も高い優先度は0です。

以下の例では、レプリカexample01-1が最高の優先度を持っています:

Usage Example

Table in PostgreSQL

Creating Table in ClickHouse, and connecting to PostgreSQL table created above

この例では、PostgreSQLテーブルエンジンを使用して、ClickHouseテーブルが上記のPostgreSQLテーブルに接続され、SELECTとINSERTステートメントの両方をPostgreSQLデータベースに対して使用します:

Inserting initial data from PostgreSQL table into ClickHouse table, using a SELECT query

postgresqlテーブル関数は、データをPostgreSQLからClickHouseにコピーします。これは、PostgreSQLではなくClickHouseでデータのクエリや分析を行うことでクエリパフォーマンスを向上させるためによく使用されるか、PostgreSQLからClickHouseへのデータ移行にも使用できます。PostgreSQLからClickHouseへデータをコピーするため、ClickHouseでMergeTreeテーブルエンジンを使用し、これをpostgresql_copyと呼びます:

Inserting incremental data from PostgreSQL table into ClickHouse table

初期の挿入の後、PostgreSQLテーブルとClickHouseテーブルの間で継続的な同期を行う場合、ClickHouseでWHERE句を使用して、タイムスタンプまたはユニークなシーケンスIDに基づいてPostgreSQLに追加されたデータのみを挿入できます。

これには、以前に追加された最大IDまたはタイムスタンプを追跡する必要があります。たとえば、以下のようにします:

その後、最大より大きいPostgreSQLテーブルから値を挿入します。

Selecting data from the resulting ClickHouse table

Using Non-default Schema

See Also