メインコンテンツまでスキップ
メインコンテンツまでスキップ

postgresql テーブル関数

リモートの PostgreSQL サーバーに保存されたデータに対して SELECTINSERT クエリを実行できるようにします。

構文

引数

引数説明
host:portPostgreSQL サーバーのアドレス。
databaseリモートデータベース名。
tableリモートテーブル名。
userPostgreSQL ユーザー。
passwordユーザーのパスワード。
schema非デフォルトのテーブルスキーマ。オプション。
on_conflictこの時の解決策。例: ON CONFLICT DO NOTHING。オプション。

引数は 名前付きコレクション を使用して渡すこともできます。この場合、hostport は別々に指定する必要があります。このアプローチは運用環境での使用を推奨します。

戻り値

元の 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 へのデータを複製するために特別に設計されたツールです。