Skip to main content
リモートの PostgreSQL サーバーに格納されているデータに対して、SELECT および INSERT クエリを実行できます。

構文

引数

引数は named collections を使用して渡すこともできます。この場合、hostport は別々に指定する必要があります。この方法は本番環境に推奨されます。 TLS/SSL パラメータは libpq に転送され、named collection のキーまたは末尾のキー・バリュー引数として指定できます。指定できるのは sslmode (disableallowpreferrequireverify-caverify-full。未設定の場合は libpq のデフォルトである prefer が適用されます) と、2 つの形式のいずれかで指定する証明書および秘密鍵です。sslrootcert (CA 証明書、または特別な値 system) 、sslcert (クライアント証明書) 、sslkey (クライアント秘密鍵) はサーバーローカルファイルへのパスであり、サーバー設定ファイルで定義された named collection でのみ指定できます。代わりに、sslrootcert_pemsslcert_pemsslkey_pem には対応するファイルの内容を直接指定できます。たとえば、postgresql('host:port', 'database', 'table', 'user', 'password', sslmode = 'verify-full', sslrootcert_pem = '...') のように指定します。これらはパスワードと同様に、ログおよび SHOW クエリではマスクされます。

戻り値

元の PostgreSQL テーブルと同じカラムを持つテーブルオブジェクト。
テーブル関数 postgresql(...) を、カラム名リスト付きのテーブル名と区別するには、INSERT クエリでキーワード FUNCTION または TABLE FUNCTION を使用する必要があります。以下の例を参照してください。

設定

postgresql テーブル関数 (およびPostgreSQLテーブルエンジン) で使用される接続プールは、末尾に SETTINGS 句を付けて設定できます。設定が指定されていない場合は、対応するクエリレベルの postgresql_* 設定の値がデフォルトで使用されます。postgresql_connection_pool_* および postgresql_connection_attempt_timeout の各設定とそのデフォルト値の一覧については、テーブルエンジンの設定セクションを参照してください。 例:

実装の詳細

PostgreSQL 側の SELECT クエリは、読み取り専用の PostgreSQL トランザクション内で COPY (SELECT ...) TO STDOUT として実行され、各 SELECT クエリの後にコミットされます。 =, !=, >, >=, <, <=, IN などの単純な WHERE 句は、PostgreSQL サーバー上で実行されます。 すべての JOIN、集計、ソート、IN [ array ] 条件、および LIMIT サンプリング制約は、PostgreSQL へのクエリが完了した後にのみ ClickHouse で実行されます。

テーブル名の代わりにクエリを渡す

テーブル名の代わりに、第 3 引数には、そのまま PostgreSQL に渡される SELECT クエリを指定できます。生成されるテーブルの構造は、クエリ結果から推論されます。クエリは、サブクエリとして記述することも、query 関数でラップすることもできます。
これは、JOIN、集計、その他のあらゆる処理を PostgreSQL にプッシュダウンするのに役立ちます。このようなテーブルは読み取り専用で、これに対する INSERT は許可されていません。同じ構文は PostgreSQL テーブルエンジンでもサポートされています。
サブクエリ形式 (SELECT ...) は ClickHouse によって解析され、サーバーに送信される前に PostgreSQL 方言 (PostgreSQL の識別子のクォートと文字列リテラルのエスケープ) で再シリアライズされます。したがって、有効な ClickHouse SQL でなければなりません。ClickHouse が解析しない PostgreSQL 固有の構文を渡すには、query('...') 形式を使用してください。この形式のテキストはそのまま PostgreSQL に送信されます。渡されたクエリには、外側の ClickHouse クエリの WHERELIMIT、集計などは プッシュダウンされません。これらは完全なクエリ結果が取得された後に ClickHouse で適用されます。PostgreSQL から読み取るデータを制限するには、渡すクエリ内にフィルターを含めてください。external_table_strict_query = 1 を使用すると、プッシュダウンできない外側のフィルターはローカルで適用される代わりに例外として拒否されます。
PostgreSQL 側の INSERT クエリは、各 INSERT ステートメントの後に自動コミットされる PostgreSQL トランザクション内で、COPY "table_name" (field1, field2, ... fieldN) FROM STDIN として実行されます。 PostgreSQL の Array 型は ClickHouse の配列に変換されます。
PostgreSQL では、Integer[] のような配列データ型のカラムに、行ごとに次元数の異なる配列を含めることができますが、ClickHouse ではすべての行で同じ次元数の多次元配列しか許可されないため、注意してください。
複数のレプリカをサポートしており、| で列挙する必要があります。例:
または
PostgreSQL の Dictionary ソースで、レプリカの優先度をサポートしています。map 内の数値が大きいほど優先度は低くなります。最も高い優先度は 0 です。

PostgreSQL のテーブル:
通常の引数を使用してClickHouseからデータを選択する:
または、named collectionsを使用する方法もあります:
データの挿入:
非デフォルトのスキーマを使用する:

PeerDB を使用した Postgres データのレプリケーションまたは移行

テーブル関数に加えて、ClickHouse の PeerDB を使って、Postgres から ClickHouse への継続的なデータパイプラインを構築することもできます。PeerDB は、CDC (変更データキャプチャ) を使用して Postgres から ClickHouse にデータをレプリケートするために専用設計されたツールです。
最終更新日 2026年8月14日