postgresql テーブル関数
リモートのPostgreSQLサーバーに保存されているデータに対して SELECT
および INSERT
クエリを実行することを可能にします。
構文
パラメータ
host:port
— PostgreSQLサーバーのアドレス。database
— リモートデータベース名。table
— リモートテーブル名。user
— PostgreSQLユーザー。password
— ユーザーパスワード。schema
— 非デフォルトのテーブルスキーマ。オプション。on_conflict
— 衝突解決戦略。例:ON CONFLICT DO NOTHING
。オプション。
引数は名前付きコレクションを使用して渡すこともできます。この場合、host
と port
は別々に指定する必要があります。このアプローチは本番環境で推奨されます。
返される値
元のPostgreSQLテーブルと同じカラムを持つテーブルオブジェクト。
INSERT
クエリでは、テーブル関数 postgresql(...)
をカラム名リストを持つテーブル名から区別するために、キーワード FUNCTION
または TABLE FUNCTION
を使用する必要があります。以下の例を参照してください。
実装の詳細
PostgreSQL側の SELECT
クエリは COPY (SELECT ...) TO STDOUT
として、リードオンリーのPostgreSQLトランザクション内で各 SELECT
クエリの後にコミットされます。
単純な WHERE
句(=
, !=
, >
, >=
, <
, <=
, および IN
など)はPostgreSQLサーバー上で実行されます。
すべての結合、集約、ソート、IN [ array ]
条件および LIMIT
サンプリング制約は、PostgreSQLへのクエリが終了した後にClickHouse内でのみ実行されます。
PostgreSQL側の INSERT
クエリは COPY "table_name" (field1, field2, ... fieldN) FROM STDIN
として、各 INSERT
文の後に自動コミットされるPostgreSQLトランザクション内で実行されます。
PostgreSQLの配列型はClickHouseの配列に変換されます。
注意が必要です。PostgreSQLでは、Integer[] のような配列データ型のカラムは異なる行に異なる次元の配列を含む場合がありますが、ClickHouseではすべての行で同じ次元の多次元配列を持つことのみが許可されます。
複数のレプリカのサポートがあり、|
でリストする必要があります。例えば:
または
PostgreSQL辞書ソースのためのレプリカの優先順位もサポートしています。マップ内の数が大きいほど優先順位は低くなります。最高の優先順位は 0
です。
例
PostgreSQLにおけるテーブル:
プレーン引数を使用してClickHouseからデータを選択:
または 名前付きコレクション を使用して:
挿入:
非デフォルトスキーマを使用:
関連情報
関連コンテンツ
PeerDBを使用したPostgresデータのレプリケーションまたは移行
テーブル関数に加えて、PostgresからClickHouseへの継続的なデータパイプラインを設定するために、ClickHouseによるPeerDBを使用することができます。PeerDBは、変更データキャプチャ(CDC)を使用してPostgresからClickHouseへデータをレプリケートするために特別に設計されたツールです。