SELECT および INSERT クエリを実行できます。
現在、テーブルエンジンでサポートされているのは PostgreSQL バージョン 12 以降のみです。
テーブルの作成
- カラム名は元の PostgreSQL テーブルと同じである必要がありますが、それらのうち一部のカラムのみを、任意の順序で使用できます。
- カラム型は元の PostgreSQL テーブルのものと異なっていてもかまいません。ClickHouse は値を ClickHouse のデータ型にキャストしようとします。
- external_table_functions_use_nulls 設定は、Nullable カラムの扱いを定義します。デフォルト値は 1 です。0 の場合、テーブル関数は Nullable カラムを作成せず、null の代わりにデフォルト値を挿入します。これは配列内の NULL 値にも適用されます。
host:port— PostgreSQL サーバーのアドレス。database— リモートデータベース名。table— リモートテーブル名。user— PostgreSQL ユーザー。password— ユーザーのパスワード。schema— デフォルト以外のテーブルスキーマ。省略可能です。on_conflict— 競合解決戦略。例:ON CONFLICT DO NOTHING。省略可能です。注意: このオプションを追加すると、挿入効率が低下します。
実装の詳細
SELECTクエリは、読み取り専用の PostgreSQL トランザクション内で COPY (SELECT ...) TO STDOUT として実行され、各SELECTクエリの後にコミットされます。
=, !=, >, >=, <, <=, IN などの単純なWHERE句は、PostgreSQL サーバー上で実行されます。
すべての JOIN、集計、ソート、IN [ array ] 条件、およびLIMITによるサンプリング制約は、PostgreSQL へのクエリが完了した後にのみ ClickHouse で実行されます。
PostgreSQL 側のINSERTクエリは、PostgreSQL トランザクション内で COPY "table_name" (field1, field2, ... fieldN) FROM STDIN として実行され、各INSERTステートメントの後に自動コミットされます。
PostgreSQL のArray型は ClickHouse の Array に変換されます。
注意してください。PostgreSQL では、
type_name[] のように作成された配列データには、同じカラム内でも行ごとに次元数が異なる多次元配列を含めることができます。一方 ClickHouse では、同じカラム内のすべての行で次元数が同じ多次元配列しか許可されません。|で列挙する必要があります。例えば:
0 です。
以下の例では、レプリカ example01-1 の優先度が最も高くなっています。