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
クエリは、読み取り専用の 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 の配列型は ClickHouse の配列に変換されます。
注意してください。PostgreSQL では Integer[] のような配列データ型のカラムが異なる行で異なる次元の配列を含むことがありますが、ClickHouse ではすべての行で同じ次元の多次元配列を持つことのみが許可されています。
複数のレプリカをサポートし、これらは |
で列挙する必要があります。例えば:
または
PostgreSQL 辞書ソースのためのレプリカ優先度をサポートします。マップの番号が大きいほど、優先度が低くなります。最も高い優先度は 0
です。
例
PostgreSQL のテーブル:
プレーン引数を使用して ClickHouse からデータを選択する:
または 名前付きコレクション を使用する:
挿入:
非デフォルトスキーマを使用する:
関連項目
PeerDB を使用した Postgres データの複製または移行
テーブル関数に加えて、ClickHouse を使用して Postgres から ClickHouse への継続的データパイプラインを設定するために、常に PeerDB を使用できます。PeerDB は、変化データキャプチャ (CDC) を使用して Postgres から ClickHouse へのデータを複製するために特別に設計されたツールです。