SELECT および INSERT クエリを実行できます。
構文
引数
引数は named collections を使用して渡すこともできます。この場合、
host と port は別々に指定する必要があります。この方法は本番環境に推奨されます。
戻り値
テーブル関数
postgresql(...) を、カラム名リスト付きのテーブル名と区別するには、INSERT クエリでキーワード FUNCTION または TABLE FUNCTION を使用する必要があります。以下の例を参照してください。設定
postgresql テーブル関数 (およびPostgreSQLテーブルエンジン) で使用される接続プールは、末尾に SETTINGS 句を付けて設定できます。設定が指定されていない場合は、対応するクエリレベルの postgresql_* 設定の値がデフォルトで使用されます。postgresql_connection_pool_* および postgresql_connection_attempt_timeout の各設定とそのデフォルト値の一覧については、テーブルエンジンの設定セクションを参照してください。
例:
実装の詳細
SELECT クエリは、読み取り専用の PostgreSQL トランザクション内で COPY (SELECT ...) TO STDOUT として実行され、各 SELECT クエリの後にコミットされます。
=, !=, >, >=, <, <=, IN などの単純な WHERE 句は、PostgreSQL サーバー上で実行されます。
すべての JOIN、集計、ソート、IN [ array ] 条件、および LIMIT サンプリング制約は、PostgreSQL へのクエリが完了した後にのみ ClickHouse で実行されます。
テーブル名の代わりにクエリを渡す
SELECT クエリを指定できます。生成されるテーブルの構造は、クエリ結果から推論されます。クエリは、サブクエリとして記述することも、query 関数でラップすることもできます。
INSERT は許可されていません。同じ構文は PostgreSQL テーブルエンジンでもサポートされています。
サブクエリ形式
(SELECT ...) は ClickHouse によって解析され、サーバーに送信される前に PostgreSQL 方言 (PostgreSQL の識別子のクォートと文字列リテラルのエスケープ) で再シリアライズされます。したがって、有効な ClickHouse SQL でなければなりません。ClickHouse が解析しない PostgreSQL 固有の構文を渡すには、query('...') 形式を使用してください。この形式のテキストはそのまま PostgreSQL に送信されます。渡されたクエリには、外側の ClickHouse クエリの WHERE、LIMIT、集計などは プッシュダウンされません。これらは完全なクエリ結果が取得された後に ClickHouse で適用されます。PostgreSQL から読み取るデータを制限するには、渡すクエリ内にフィルターを含めてください。external_table_strict_query = 1 を使用すると、プッシュダウンできない外側のフィルターはローカルで適用される代わりに例外として拒否されます。INSERT クエリは、各 INSERT ステートメントの後に自動コミットされる PostgreSQL トランザクション内で、COPY "table_name" (field1, field2, ... fieldN) FROM STDIN として実行されます。
PostgreSQL の Array 型は ClickHouse の配列に変換されます。
PostgreSQL では、Integer[] のような配列データ型のカラムに、行ごとに次元数の異なる配列を含めることができますが、ClickHouse ではすべての行で同じ次元数の多次元配列しか許可されないため、注意してください。
| で列挙する必要があります。例:
0 です。
例
PeerDB を使用した Postgres データのレプリケーションまたは移行
テーブル関数に加えて、ClickHouse の PeerDB を使って、Postgres から ClickHouse への継続的なデータパイプラインを構築することもできます。PeerDB は、CDC (変更データキャプチャ) を使用して Postgres から ClickHouse にデータをレプリケートするために専用設計されたツールです。